分析
中序遍历,先便利右孩子,再遍历左孩子,这样遍历得到的结果是递减,是原来中序遍历的逆序,倒置。
class Solution {
int presum = 0;
public TreeNode convertBST(TreeNode root) {
if(root == null){
return null;
}
convertBST(root.right);
root.val = root.val + presum;
presum = root.val;
convertBST(root.left);
return root;
}
}
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
/*
二叉搜索树中序遍历是数值从小到大的,若按照右,根,左的顺序遍历二叉树(这不是后序遍历),数值是从大到小的
用一个全局变量tmp保存已经遍历过的结点的和
tmp+当前结点的值=新结点的值。
*/
int tmp = 0;
public TreeNode convertBST(TreeNode root) {
if(root == null){
return null;
}
root.right=convertBST(root.right);
root.val=tmp+root.val;
tmp=root.val;
root.left=convertBST(root.left);
return root;
}
}