2020年9月21日 把二叉搜索树转换为累加树 convertBST
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode convertBST(TreeNode root) {
}
}
解题思路:
首先,搜索树是左边小,右边大,中间处于中间的一种用于快速搜索某个数字的二叉树。
那么很明显,节点处理的顺序是从大到小,我们只需要记录下当前的累积值,并且将它和当前正在处理的节点的值相加就是我们的新的累积值。
起始我们的累计值是0。
当处理一个节点时,我们先得到他右节点的累计值。这样就会递归到边界,最右边的节点,也就是值最大的节点,没有右子节点的节点,此时我们将它的值计入累计值中。
代码实现:
int sum=0;
public TreeNode convertBST(TreeNode root) {
if (root==null)
return null;
if (sum==0&&root.right==null)
{
sum+=root.val;
convertBST(root.left);
return root;
}
//先做右边
convertBST(root.right);
root.val+=sum;
sum=root.val;
//在做左边
convertBST(root.left);
return root;
}