Leetcode——把二叉搜索树转换为累加树
Posted Yawn,
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode——把二叉搜索树转换为累加树相关的知识,希望对你有一定的参考价值。
1. 把二叉树转换为累加树
从树中可以看出累加的顺序是右中左,所以我们需要 反中序遍历 这个二叉树,然后顺序累加就可以了。
当前值等于 2+5+3, 5+3, 8
(1)递归
class Solution {
int sum;
public TreeNode convertBST(TreeNode root) {
sum = 0;
convertBST1(root);
return root;
}
// 按右中左顺序遍历,累加即可
public void convertBST1(TreeNode root) {
if (root == null) {
return;
}
convertBST1(root.right);
sum += root.val;
root.val = sum;
convertBST1(root.left);
}
}
(2)迭代
/**
* 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 pre;
public TreeNode convertBST(TreeNode root) {
pre = 0;
bfs(root);
return root;
}
public void bfs (TreeNode root) {
if (root == null)
return;
Deque<TreeNode> stack = new LinkedList<>();
TreeNode cur = root;
while (cur != null || !stack.isEmpty()) {
if(cur != null) { //一直向right走,直到头
stack.push(cur);
cur = cur.right;
} else { //如果没left就添加父节点然后再找父节点的left
cur = stack.pop(); // 中
cur.val = cur.val + pre;
pre = cur.val;
cur = cur.left;
}
}
}
}
以上是关于Leetcode——把二叉搜索树转换为累加树的主要内容,如果未能解决你的问题,请参考以下文章