Leetcode——把二叉搜索树转换为累加树

Posted Yawn,

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode——把二叉搜索树转换为累加树相关的知识,希望对你有一定的参考价值。

1. 把二叉树转换为累加树



从树中可以看出累加的顺序是右中左,所以我们需要 反中序遍历 这个二叉树,然后顺序累加就可以了。
当前值等于 2+5+3, 5+3, 8

(1)递归

class Solution {
    int sum;
    public TreeNode convertBST(TreeNode root) {
        sum = 0;
        convertBST1(root);
        return root;
    }

    // 按右中左顺序遍历,累加即可
    public void convertBST1(TreeNode root) {
        if (root == null) {
            return;
        }
        convertBST1(root.right);
        sum += root.val;
        root.val = sum;
        convertBST1(root.left);
    }
}

(2)迭代

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int pre;
    public TreeNode convertBST(TreeNode root) {
        pre = 0;
        bfs(root);
        return root;
    }

    public void bfs (TreeNode root) {
        if (root == null)
            return;
        Deque<TreeNode> stack = new LinkedList<>();
        TreeNode cur = root;
        while (cur != null || !stack.isEmpty()) {
            if(cur != null) {       //一直向right走,直到头
				stack.push(cur);
				cur = cur.right;
			} else {                //如果没left就添加父节点然后再找父节点的left
				cur = stack.pop();          // 中
				cur.val = cur.val + pre;
                pre = cur.val;
				cur = cur.left;
			}

        }
    }
}

以上是关于Leetcode——把二叉搜索树转换为累加树的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode]538. 把二叉搜索树转换为累加树

LeetCode 0538. 把二叉搜索树转换为累加树

LeetCode 0538. 把二叉搜索树转换为累加树

538-把二叉搜索树转换为累加树

Leetcode——把二叉搜索树转换为累加树

⭐算法入门⭐《二叉树 - 二叉搜索树》中等04 —— LeetCode 538. 把二叉搜索树转换为累加树