本文主要是介绍二叉树|538.把二叉搜索树换为累加树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
力扣题目链接
class Solution {
private:int pre = 0; // 记录前一个节点的数值void traversal(TreeNode* cur) { // 右中左遍历if (cur == NULL) return;traversal(cur->right);cur->val += pre;pre = cur->val;traversal(cur->left);}
public:TreeNode* convertBST(TreeNode* root) {pre = 0;traversal(root);return root;}
};
这题的关键在如何累加,如何存储新的二叉树。
卡哥说:
其实这就是一棵树,大家可能看起来有点别扭,换一个角度来看,这就是一个有序数组[2, 5, 13],求从后到前的累加数组,也就是[20, 18, 13],是不是感觉这就简单了。
代码随想录 (programmercarl.com)
对啊,二叉搜索树可以表示成有序数组,这点可别忘了啊!
搞懂这个思路,代码是不是就很好理解了呢?
可为什么是右中左遍历呢?
这点要想清楚哦,这里有点小困惑哈哈哈
自己独自敲代码遇到的问题可真的多啊!
这篇关于二叉树|538.把二叉搜索树换为累加树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!