javaleetcode105.从前序和中序遍历序列构造二叉树
Posted Java第一傻
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaleetcode105.从前序和中序遍历序列构造二叉树相关的知识,希望对你有一定的参考价值。
问题描述
leetcode105.从前序和中序遍历序列构造二叉树
题目分析:
构造二叉树,第一件事一定是找根节点,然后想办法构造左右子树。将inorder[]对应关系存入HashMap中,已知preorder[]的第一个元素是二叉树的根节点,那么可根此将inorder[]分为三部分:
之后将root.left也可分为三部分,root.right也可分为三部分,通过递归可使问题得到最终解决。
代码实现:
class Solution
HashMap<Integer,Integer> map=new HashMap<>();
public TreeNode buildTree(int[] preorder, int[] inorder)
for (int i = 0; i < inorder.length; i++)
map.put(inorder[i],i);
return
rebuild(preorder, 0, preorder.length - 1,
inorder, 0, inorder.length - 1);
public TreeNode rebuild(int[] preorder, int preStart, int preEnd,
int[] inorder, int inStart, int inEnd)
if(preStart>preEnd||inStart>inEnd)
return null;
int rootval=preorder[preStart];
int index=map.get(rootval);
int leftsize=index-inStart;
TreeNode root=new TreeNode(rootval);
root.left=rebuild(preorder, preStart + 1, preStart + leftsize,
inorder, inStart, index - 1);
root.right = rebuild(preorder, preStart + leftsize + 1, preEnd,
inorder, index + 1, inEnd);
return root;
以上是关于javaleetcode105.从前序和中序遍历序列构造二叉树的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Java刷题笔记—105. 从前序与中序遍历序列构造二叉树
[LeetCode] 105. Construct Binary Tree from Preorder and Inorder Traversal 由先序和中序遍历建立二叉树