LeetCode 897 递增顺序查找树 (树)
程序员文章站
2024-03-17 17:10:22
...
1.递增顺序查找树
给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。
示例 :
输入:[5,3,6,2,4,null,8,1,null,null,null,7,9]
5
/ \
3 6
/ \ \
2 4 8
/ / \
1 7 9
输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]
1
\
2
\
3
\
4
\
5
\
6
\
7
\
8
\
9
提示:
给定树中的结点数介于 1 和 100 之间。
每个结点都有一个从 0 到 1000 范围内的唯一整数值。
思路:中序遍历得到树的元素(可用迭代也可用递归),保存在数组中,然后创建新的树。
/**
* 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* increasingBST(TreeNode* root) {
vector<int> valSet;
stack<TreeNode*> stack;
while(root || !stack.empty()){ //迭代求得中序遍历
while(root){
stack.push(root);
root=root->left;
}
if(!stack.empty()){
valSet.push_back(stack.top()->val);
root=stack.top()->right;
stack.pop();
}
}
TreeNode* increBST=new TreeNode(valSet[0]);
TreeNode* tempBST= increBST;
for(int i=1;i<valSet.size();i++){
tempBST->right=new TreeNode(valSet[i]);
tempBST=tempBST->right;
}
return increBST;
}
};
改用递归,其实时间是差不多的,基本上一样
/**
* 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* increasingBST(TreeNode* root) {
vector<int> tempVal;
inorderTraversal(root,tempVal);
TreeNode* increBST=new TreeNode(tempVal[0]); //注意这里需要new一个空间
TreeNode* tempBST= increBST;
for(int i=1;i<tempVal.size();i++){
tempBST->right=new TreeNode(tempVal[i]); //new 一个空间
tempBST=tempBST->right;
}
return increBST;
}
void inorderTraversal(TreeNode* root,vector<int> &tempVal){ //递归中序遍历得到树的元素
if(root->left!=NULL){//遍历左子树
inorderTraversal(root->left,tempVal);
}
tempVal.push_back(root->val);//记录根节点
if(root->right!=NULL){//遍历右子树
inorderTraversal(root->right,tempVal);
}
}
};
上一篇: web前端性能优化
下一篇: JDBC连接使用基本步骤
推荐阅读
-
LeetCode 897 递增顺序查找树 (树)
-
查找算法(顺序查找、二分法查找、二叉树查找、hash查找)
-
【leetcode】-700. Search in a Binary Search Tree 查找二叉搜索树
-
查找——顺序、折半、插值、斐波那契与二叉树
-
七大查找算法(顺序查找、折半查找、插值查找、斐波那契查找、分块查找、哈希查找、树表查找)
-
Leetcode897. 递增顺序查找树
-
顺序查找--二分查找--静态树表的查找--分块查找
-
leetcode 二分查找和二叉查找树
-
查找算法(顺序查找、二分法查找、二叉树查找、hash查找)
-
【leetcode】-700. Search in a Binary Search Tree 查找二叉搜索树