码迷,mamicode.com
首页 > 其他好文 > 详细

538. Convert BST to Greater Tree

时间:2017-11-28 01:23:32      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:二叉树   节点   change   sum   tput   div   解决方案   就是   convert   

Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST.

Example:

Input: The root of a Binary Search Tree like this:
              5
            /              2     13

Output: The root of a Greater Tree like this:
             18
            /             20     13

给一棵二叉搜索树,每一个节点等于自身加上与比它大的节点的值的和

解决方案比较容易,因为是二叉搜索树,所以右>根>左。这样右节点的值就等于自身(其实这里有个bug),根节点的需要加上右节点的值,左节点再加上改变后的根的值就行了。

于是第一份代码:

 1 class Solution {
 2 public:
 3     TreeNode* convertBST(TreeNode* root) {
 4         if(root){
 5             int vr = 0;
 6             if( root->right ){
 7                 root->right = convertBST(root->right);
 8                 vr = root->right->val;
 9             }
10             root->val += vr;
11             if( root->left ){
12                 root->left->val += root->val;
13                 root->left = convertBST(root->left); 
14             }
15         }
16         return root;
17     }
18 };

输出结果是错的,

Input:
[2,0,3,-4,1]
Output:
[5,6,3,2,1]
Expected:
[5,6,3,2,6]

检查以后发现,这样子写,对于每个由“根、左、右”的局部小树的逻辑是对的。但是对整棵二叉树而言,没有考虑到整体右边部分节点对整体左边部分的右节点的影响(有点绕。。。)。反应在输出结果上就是那个“1”没有加上“2和3”。

修改:需要增加一个变量,记录所有“较大值”。

结果为了怎么记录的问题纠结了半天,不想新写一个函数不断传参。还试了试static……最后忍不住看了看网上答案。直接把变量定义在函数体外就完了。瞬间觉得自己傻了。

正确代码:

 1 class Solution {
 2 private:
 3     int sum = 0;
 4 public:
 5     TreeNode* convertBST(TreeNode* root) {
 6         if(root){
 7             root->right = convertBST(root->right);
 8             root->val += sum;
 9             sum = root->val;
10             root->left = convertBST(root->left); 
11         }
12         return root;
13     }
14 };

 

538. Convert BST to Greater Tree

标签:二叉树   节点   change   sum   tput   div   解决方案   就是   convert   

原文地址:http://www.cnblogs.com/Zzz-y/p/7906528.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!