Problem: 538. 把二叉搜索树转换为累加树
文章目录
- 题目描述
- 思路
- 复杂度
- Code
题目描述
思路
利用二叉搜索树中序遍历的特性,**降序遍历(此处是想表达先遍历其右子树再遍历其左子树这样遍历的过程中每个节点值得大小排序是降序得)**其节点,然后通过维护一个外部int变量sum求和来修改原始得节点值
复杂度
时间复杂度:
O ( n ) O(n) O(n);其中 n n n为二叉搜索树的节点的个数
空间复杂度:
O ( h e i g h t ) O(height) O(height);其中 h e i g h t height height为二叉搜索树的高度
Code
/**
* 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;
/**
* Convert BST to Greater Tree
*
* @param root The root of binary tree
* @return TreeNode
*/
public TreeNode convertBST(TreeNode root) {
traverse(root);
return root;
}
/**
* Convert BST to Greater Tree(Implementation function)
*
* @param root The root of binary tree
*/
private void traverse(TreeNode root) {
if (root == null) {
return;
}
traverse(root.right);
sum += root.val;
root.val = sum;
traverse(root.left);
}
}