Convert BST to Greater Tree(leetcode)

来源:互联网 发布:淘宝发布食品宝贝 编辑:程序博客网 时间:2024/06/17 00:16

Convert BST to Greater Tree

  • Convert BST to Greater Tree
    • 题目
    • 解决


题目

leetcode题目

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    13Output: The root of a Greater Tree like this:             18            /   \          20    13

解决

题目要求是将原二叉树的每个节点的值加上原二叉树中比该节点的值大的数之和,构建一个新的Greater Tree
例如:下面的BST

              5                   18            /   \                /  \           2    13      =>      24   13          / \                  /  \         1   4                25  22

这道题目是二叉树后序遍历的一个变形。利用一个变量sum来记录遍历过节点的值的总和。

/** * 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;        stack<TreeNode*> tree;        TreeNode* temp = root;        while (!tree.empty() || temp != NULL) {            while (temp != NULL) {                tree.push(temp);                temp = temp->right;            }            temp = tree.top();            tree.pop();            temp->val += sum;            sum = temp->val;            temp = temp->left;        }        return root;    }};
原创粉丝点击