本文主要是介绍Convert BST to Greater Tree问题及解法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题描述:
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.
示例:
Input: The root of a Binary Search Tree like this:5/ \2 13Output: The root of a Greater Tree like this:18/ \20 13
问题分析:
利用深度优先遍历,先遍历右子树,在遍历根节点,最后遍历左子树,对于每一个遍历到的结点root,root->val += sum(sum代表所以遍历到的节点的值的和),sum = root->val.
过程详见代码:
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:TreeNode* convertBST(TreeNode* root) {int sum = 0;bl(root, sum);return root;}void bl(TreeNode* root,int& sum){if (root == NULL) return;bl(root->right,sum);root->val += sum;sum = root->val;bl(root->left, sum);}
};
这篇关于Convert BST to Greater Tree问题及解法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!