538 Convert BST to Greater Tree 把二叉搜索樹轉換為累加樹
阿新 • • 發佈:2018-04-23
arch rtb efi fin tac problem https 一個 htm
給定一個二叉搜索樹(Binary Search Tree),把它轉換成為累加樹(Greater Tree),使得每個節點的值是原來的節點值加上所有大於它的節點值之和。
例如:
輸入: 二叉搜索樹:
5
/ \
2 13
輸出: 轉換為累加樹:
18
/ \
20 13
詳見:https://leetcode.com/problems/convert-bst-to-greater-tree/description/
C++:
方法一:
/** * 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; helper(root, sum); return root; } void helper(TreeNode*& node, int& sum) { if (!node) { return; } helper(node->right, sum); node->val += sum; sum = node->val; helper(node->left, 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) { if (!root) { return nullptr; } int sum = 0; stack<TreeNode*> stk; TreeNode *p = root; while (p || !stk.empty()) { while (p) { stk.push(p); p = p->right; } p = stk.top(); stk.pop(); p->val += sum; sum = p->val; p = p->left; } return root; } };
參考:http://www.cnblogs.com/grandyang/p/6591526.html
538 Convert BST to Greater Tree 把二叉搜索樹轉換為累加樹