Construct Binary Tree from Preorder and Inorder Traversal(前序遍歷和中序遍歷樹構造二叉樹)...
問題
Given preorder and inorder traversal of a tree, construct the binary tree.
** Notice
You may assume that duplicates do not exist in the tree.
Have you met this question in a real interview? Yes
ExampleGiven in-order [1,2,3]
and pre-order [2,1,3]
, return a tree:
分析
以這個二叉樹為例,前序是1245367,中序是4251637。我們知道前序的第一個一定是根結點。所以先把1找出來,然後在中序裡邊找到1,那麼1左邊的一定是1的左子樹,1右邊的一定是1的右子樹,然後遞迴即可。裡邊需要使用到前序,中序和後序的知識,大家自行查閱資料學習。
程式碼
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
*@param preorder : A list of integers that preorder traversal of a tree
*@param inorder : A list of integers that inorder traversal of a tree
*@return : Root of a tree
*/
public TreeNode buildTree(int[] preorder, int[] inorder) {
// write your code here
return buildTree(preorder,0,preorder.length-1,inorder,0,inorder.length-1);
}
private TreeNode buildTree(int[] preorder,int pleft,int pright, int[] inorder,int ileft,int iright){
if(pleft>pright||ileft>iright){
return null;
}
int i=preorder[pleft];
TreeNode node=new TreeNode(i);
int index=ileft;
while(inorder[index]!=i){
index++;
}
int leftLength=index-ileft;
node.left=buildTree(preorder,pleft+1,pleft+leftLength,inorder,ileft,index-1);
node.right=buildTree(preorder,pleft+leftLength+1,pright,inorder,index+1,iright);
return node;
}
}
相關文章
- 二叉樹:構造二叉樹(通過前序和中序遍歷)、映象翻轉、層次遍歷二叉樹
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- PAT 1043 Is It a Binary Search Tree (25分) 由前序遍歷得到二叉搜尋樹的後序遍歷
- 根據前序遍歷序列、中序遍歷序列,重建二叉樹二叉樹
- 889. 根據前序和後序遍歷構造二叉樹二叉樹
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- 【根據前序和中序遍歷構造二叉樹】棧+迭代 || 遞迴二叉樹遞迴
- Leetcode 889. 根據前序和後序遍歷構造二叉樹LeetCode二叉樹
- LeetCode 105. 從前序與中序遍歷序列構造二叉樹LeetCode二叉樹
- LeetCode-105-從前序與中序遍歷序列構造二叉樹LeetCode二叉樹
- 中序線索二叉樹的構造和遍歷二叉樹
- 388,先序遍歷構造二叉樹二叉樹
- 二叉樹的前序、中序、後序三種遍歷二叉樹
- LeetCode 105. 從前序與中序遍歷序列構造二叉樹 | PytLeetCode二叉樹
- 二叉樹的前序,中序,後序遍歷方法總結二叉樹
- 從中序與後序遍歷序列構造二叉樹二叉樹
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- Java中用遞迴和迭代實現二叉樹的中序( InOrder )遍歷Java遞迴二叉樹
- N叉樹——前序遍歷
- The order of a Tree (二叉搜尋樹+先序遍歷)
- 144. 二叉樹的前序遍歷二叉樹
- 二叉樹--後序遍歷二叉樹
- 劍指offer:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。二叉樹
- 刷題系列 - 給出前序和後序遍歷佇列,構造對應二叉樹佇列二叉樹
- 144. 二叉樹的遍歷「前序、中序、後序」 Golang實現二叉樹Golang
- 刷題筆記:樹的前序、中序、後序遍歷筆記
- 二叉樹中序和後序遍歷表示式二叉樹
- 線索二叉樹的構造和遍歷二叉樹
- 二叉樹迭代器(中序遞迴、前序和後序遍歷)演算法二叉樹遞迴演算法
- Leetcode——144. 二叉樹的前序遍歷LeetCode二叉樹
- 二叉樹的層序遍歷二叉樹
- LeetCode-106-從中序與後序遍歷序列構造二叉樹LeetCode二叉樹
- 刷題系列 - 中序和後序遍歷佇列,構造對應二叉樹;佇列二叉樹
- L2_006樹的遍歷(後序+中序->前序/層序)
- 二叉樹的先中後序遍歷二叉樹
- 二叉樹的先,中,後序遍歷二叉樹
- 二叉樹的前中後序遍歷二叉樹
- 程式碼隨想錄演算法訓練營day14 | leetcode 144. 二叉樹的前序遍歷、145. 二叉樹的後序遍歷、94. 二叉樹的中序遍歷演算法LeetCode二叉樹
- 【資料結構與演算法】二叉樹的 Morris 遍歷(前序、中序、後序)資料結構演算法二叉樹