题538 把二叉搜索树转换为累加树(反中序遍历,Morris遍历)

1.题目

在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.自己初解的思路及问题

略,直接看力扣题解

3.题解方法一:反中序遍历

在这里插入图片描述在这里插入图片描述

class Solution {
    
    
    int sum = 0;

    public TreeNode convertBST(TreeNode root) {
    
    
        if (root != null) {
    
    
            convertBST(root.right);
            sum += root.val;
            root.val = sum;
            convertBST(root.left);
        }
        return root;
    }
}

在这里插入图片描述

4.题解方法二:Morris 遍历

在这里插入图片描述在这里插入图片描述

class Solution {
    
    
    public TreeNode convertBST(TreeNode root) {
    
    
        int sum = 0;
        TreeNode node = root;

        while (node != null) {
    
    
            if (node.right == null) {
    
    
                sum += node.val;
                node.val = sum;
                node = node.left;
            } else {
    
    
                TreeNode succ = getSuccessor(node);
                if (succ.left == null) {
    
    
                    succ.left = node;
                    node = node.right;
                } else {
    
    
                    succ.left = null;
                    sum += node.val;
                    node.val = sum;
                    node = node.left;
                }
            }
        }

        return root;
    }

    public TreeNode getSuccessor(TreeNode node) {
    
    
        TreeNode succ = node.right;
        while (succ.left != null && succ.left != node) {
    
    
            succ = succ.left;
        }
        return succ;
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ambitionLlll/article/details/114365656
今日推荐