java數據結構與算法刷題目錄(劍指Offer、LeetCode、ACM)-----主目錄-----持續更新(進不去說明我沒寫完):https://blog.csdn.net/grd_java/article/details/123063846 |
---|
文章目錄
解題思路 |
---|
- BST二叉搜索樹,中序遍歷結果為一個升序序列,而逆中序遍歷結果為一個降序序列
- 每一個結點都累加比自己大的值和自己本身
- 本質上就是降序序列,求前幾個元素的累加和罷了
- 所以我們采用逆中序遍歷。先右,在中,然后左
- 而"中"操作,進行累加,并賦值替換原來的值為累加后的值
代碼 |
---|
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {int sum = 0;//指向逆中序遍歷(右中左)前一個結點的val值public TreeNode convertBST(TreeNode root) {if(root == null) return null;convertBST(root.right);//先右子樹sum += root.val;//累加,這就是當前結點的值,也是下一個結點的前驅值root.val = sum;//然后保存累加后的值convertBST(root.left);//然后左子樹return root;}
}