2022-8-17 剑指offer-二叉树-递归
给定一个二叉搜索树,请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。
提醒一下,二叉搜索树满足下列约束条件:
- 节点的左子树仅包含键 小于 节点键的节点。
- 节点的右子树仅包含键 大于 节点键的节点。
- 左右子树也必须是二叉搜索树。
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode() {} 8 * TreeNode(int val) { this.val = val; } 9 * TreeNode(int val, TreeNode left, TreeNode right) { 10 * this.val = val; 11 * this.left = left; 12 * this.right = right; 13 * } 14 * } 15 */ 16 class Solution { 17 List<TreeNode> list; 18 public TreeNode convertBST(TreeNode root) { 19 list=new ArrayList<>(); 20 inorder(root); 21 int sum=0; 22 for (int i=list.size()-1;i>=0;i--){ 23 TreeNode temp=list.get(i); 24 sum+=temp.val; 25 temp.val=sum; 26 } 27 return root; 28 } 29 30 public void inorder(TreeNode root){ 31 if (root==null) return; 32 inorder(root.left); 33 list.add(root); 34 inorder(root.right); 35 } 36 }
思路:反序中序遍历,累加值更新即可。