LeetCode.897-递增搜索树(Increasing Order Search Tree)
Posted xiaochuan94
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode.897-递增搜索树(Increasing Order Search Tree)相关的知识,希望对你有一定的参考价值。
这是悦乐书的第346次更新,第370篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第211题(顺位题号是897)。给定一棵树,按中序遍历顺序重新排列树,以便树中最左边的节点现在是树的根,并且每个节点都没有左子节点,只有一个右子节点。例如:
输入:[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的唯一整数值。
02 第一种解法
先对原二叉树通过递归的方式进行中序遍历,将所有的节点值存入一个List中,以List中的第一个元素作为根节点,再遍历List中剩下的其他元素,作为树的右子节点,最后返回新树。
public TreeNode increasingBST(TreeNode root)
List<Integer> list = new ArrayList<Integer>();
inorder(root, list);
TreeNode result = new TreeNode(list.get(0));
TreeNode ans = result;
for (int i=1; i<list.size(); i++)
ans.right = new TreeNode(list.get(i));
ans = ans.right;
return result;
public void inorder(TreeNode node, List<Integer> list)
if (node == null)
return ;
inorder(node.left, list);
list.add(node.val);
inorder(node.right, list);
03 第二种解法
思路和第一种解法一样,只是将中序遍历二叉树从递归换成了迭代。
public TreeNode increasingBST2(TreeNode root)
List<Integer> list = new ArrayList<Integer>();
Stack<TreeNode> stack = new Stack<TreeNode>();
while (root != null || !stack.isEmpty())
while (root != null)
stack.push(root);
root = root.left;
if (!stack.isEmpty())
root = stack.pop();
list.add(root.val);
root = root.right;
TreeNode result = new TreeNode(list.get(0));
TreeNode ans = result;
for (int i=1; i<list.size(); i++)
ans.right = new TreeNode(list.get(i));
ans = ans.right;
return result;
04 第三种解法
我们还可以再简化下,不使用List来存储原二叉树的节点值,直接将得到的节点值作为新二叉树的节点值即可。
public TreeNode increasingBST3(TreeNode root)
TreeNode result = new TreeNode(0);
TreeNode ans = result;
Stack<TreeNode> stack = new Stack<TreeNode>();
while (root != null || !stack.isEmpty())
while (root != null)
stack.push(root);
root = root.left;
if (!stack.isEmpty())
root = stack.pop();
// 直接处理节点,作为新树的右子节点
ans.right = new TreeNode(root.val);
ans = ans.right;
root = root.right;
return result.right;
05 第四种解法
针对上面的第三种解法,我们也可以使用递归来解。
TreeNode ans;
public TreeNode increasingBST4(TreeNode root)
TreeNode result = new TreeNode(0);
ans = result;
helper(root);
return result.right;
public void helper(TreeNode root)
if (root == null)
return ;
helper(root.left);
ans.right = new TreeNode(root.val);
ans = ans.right;
helper(root.right);
06 小结
算法专题目前已连续日更超过六个月,算法题文章214+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
以上是关于LeetCode.897-递增搜索树(Increasing Order Search Tree)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 897 Increasing Order Search Tree 解题报告
LeetCode Algorithm 897. 递增顺序搜索树