您的位置:首页 > 其它

Convert BST to Greater Tree

2017-05-20 22:26 316 查看

问题描述:

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.

样例:

Given a binary search Tree `{5,2,3}`:
5
/   \
2     13


Return the root of new tree
18
/   \
20     13


解题思路:

二叉排序树按中序遍历的先右后左得到的数组是从大到小的排列的,正好变换之后就是每一元素加上前面的元素的和。用了两次得中序遍历,第一次得到数组,处理后在重新更改二叉树。

代码:

/**
* Definition of TreeNode:
* class TreeNode {
* public:
*     int val;
*     TreeNode *left, *right;
*     TreeNode(int val) {
*         this->val = val;
*         this->left = this->right = NULL;
*     }
* }
*/
class Solution {
public:
/**
* @param root the root of binary tree
* @return the new root
*/
vector<int>tree;
void InorderTraversal(TreeNode *root) {
if (root== NULL)return ;
InorderTraversal(root->right);
tree.push_back(root->val);
InorderTraversal(root->left);
}
int k=0;
void InorderTraversal1(TreeNode *root) {
if (root== NULL)return ;
InorderTraversal1(root->right);
root->val=tree[k];k++;
InorderTraversal1(root->left);
}
TreeNode* convertBST(TreeNode* root) {
// Write your code here
InorderTraversal(root);
for(int i=1;i<tree.size();i++){
tree[i]=tree[i]+tree[i-1];
}
InorderTraversal1(root);
return root;
}

};


感想:
方法虽然很简单但是时间效率太低了 需要两次遍历才能得到结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: