538. Convert BST to Greater Tree
来源:互联网 发布:php namespace use 编辑:程序博客网 时间:2024/04/30 08:14
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
我的解答:
首先通过中序遍历将所有节点的值都存放在一个vector<int> a中,然后遍历树,对每个节点加上a中比节点要大的值
这样写十分臃肿,时间复杂度也高。
/** * 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) { vector<int> a; toVector(root, a); addToGreater(root, a); return root; } void addToGreater(TreeNode* root, vector<int>& a){ if(!root){ return; } int temp = root->val; for(int i = 0; i < a.size(); i++){ if(a[i] > temp){ root->val += a[i]; } } addToGreater(root->left, a); addToGreater(root->right, a); } void toVector(TreeNode* root, vector<int>& a){ if(!root){ return; } toVector(root->left, a); a.push_back(root->val); toVector(root->right, a); }};
比较好的做法是直接利用中序遍历,同时,在类中声明一个全局的sum变量,初始值为0。
利用迭代的思想
对于一个结点,他本身需要加上右子树中所有节点的和,以及父节点已经改变了的值。
/** * 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: int sum = 0; TreeNode* convertBST(TreeNode* root) { addSum(root); return root; } void addSum(TreeNode* root){ if(!root){ return; } addSum(root->right); root->val = (sum += root->val); addSum(root->left); }};
阅读全文
0 0
- 538. Convert BST to Greater Tree
- Leetcode-538. Convert BST to Greater Tree
- 【LeetCode】538. Convert BST to Greater Tree
- [leetcode] 538. Convert BST to Greater Tree
- Leetcode 538. Convert BST to Greater Tree
- leetcode 538. Convert BST to Greater Tree
- 538. Convert BST to Greater Tree
- 538. Convert BST to Greater Tree
- leetcode 538. Convert BST to Greater Tree
- leetcode 538. Convert BST to Greater Tree
- 538. Convert BST to Greater Tree
- 538. Convert BST to Greater Tree
- [leetcode]538. Convert BST to Greater Tree
- LeetCode 538. Convert BST to Greater Tree
- 538. Convert BST to Greater Tree
- 538. Convert BST to Greater Tree
- leetcode 538. Convert BST to Greater Tree
- [LeetCode] 538. Convert BST to Greater Tree
- opencv环境配置
- 【刷题日记】向NOIP2017冲刺!
- HDU--1710--Binary Tree Traversals(二叉树遍历)
- Java---学习(6)
- 51nod 1086 背包问题V2 (巧妙dp,二进制)
- 538. Convert BST to Greater Tree
- 卡尔曼滤波
- Java---学习(7)
- python中hashlib模块
- 链家、CVTE笔试题
- 简单的分布式进程
- POJ 3764:01字典树
- linux文件系统及bash基础特性
- 最长不下降子序列