题目描述:
给出二叉 搜索 树的根节点,该二叉树的节点值各不相同,修改二叉树,使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。
提醒一下,二叉搜索树满足下列约束条件:
节点的左子树仅包含键 小于 节点键的节点。
节点的右子树仅包含键 大于 节点键的节点。
左右子树也必须是二叉搜索树。
方法一:非递归,借助栈,右中左遍历树,将他们的和加起来加上节点的值就是当前节点的值
class Solution {
int sum=0;
public TreeNode bstToGst(TreeNode root) {
Stack<TreeNode> stack=new Stack<>();
TreeNode cur=root;
while(cur!=null||!stack.isEmpty()){
while(cur!=null){
stack.push(cur);
cur=cur.right;
}
TreeNode tmp=stack.pop();
sum+=tmp.val;
tmp.val=sum;
cur=tmp.left;
}
return root;
}
}
方法二:递归
class Solution {
int sum=0;
public TreeNode bstToGst(TreeNode root) {
if(root!=null){
bstToGst(root.right);
sum+=root.val;
root.val=sum;
bstToGst(root.left);
}
return root;
}
}