我们知道搜索二叉树也叫有序二叉树每一个节点的左节点值小于当前节点,右节点大于当前节点,简单理解为左小又大,是由顺序的所以叫有序二叉树,因为有顺序方便搜索又叫搜索二叉树
这道题虽然中等题但是理解题意就并不难,题意就是将原来的数的每个节点的值换成当前节点本身的值 + 当前节点所有右边子树的值(右边的值比他大)最后就是答案
我们只需要反序中序遍历该二叉搜索树,记录过程中的节点值之和,并不断更新当前遍历到的节点的节点值,即可得到题目要求的累加树。
我在本地写了一个数结构以及搜索树的初始化函数
题目代码:
public class ConvertBST {
public static int sum = 0;
public static void main(String[] args) {
int[] arr = new int[]{4,1,6,0,2,5,7,3,8};
TreeNode root = TreeNode.initTree(arr);//给树初始化赋值,方便测试
//System.out.println(root);
System.out.println(convertBST(root));
}
public static TreeNode convertBST(TreeNode root){
if(root!=null){
convertBST(root.right);
sum += root.data;//节点值累加
root.data = sum;//更新当前节点的值
convertBST(root.left);
}
return root;
}
}