pat根据中序遍历和先序遍历_[leetcode/lintcode 题解] 前序遍历和中序遍历树构造二叉树...
生活随笔
收集整理的這篇文章主要介紹了
pat根据中序遍历和先序遍历_[leetcode/lintcode 题解] 前序遍历和中序遍历树构造二叉树...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目描述】
根據前序遍歷和中序遍歷樹構造二叉樹.
在線評測地址:
九章算法 - 幫助更多中國人找到好工作,硅谷頂尖IT企業工程師實時在線授課為你傳授面試技巧?www.jiuzhang.com【樣例】
樣例 1:
輸入:[],[] 輸出:{} 解釋: 二叉樹為空樣例 2:
輸入:[2,1,3],[1,2,3] 輸出:{2,1,3} 解釋: 二叉樹如下2/ 1 3【題解】
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
前序的第一個為根,在中序中找到根的位置。
中序中根的左右兩邊即為左右子樹的中序遍歷。同時可知左子樹的大小size-left。
前序中根接下來的size-left個是左子樹的前序遍歷。
由此可以遞歸處理左右子樹。
public class Solution {private int findPosition(int[] arr, int start, int end, int key) {int i;for (i = start; i <= end; i++) {if (arr[i] == key) {return i;}}return -1;}private TreeNode myBuildTree(int[] inorder, int instart, int inend,int[] preorder, int prestart, int preend) {if (instart > inend) {return null;}TreeNode root = new TreeNode(preorder[prestart]);int position = findPosition(inorder, instart, inend, preorder[prestart]);root.left = myBuildTree(inorder, instart, position - 1,preorder, prestart + 1, prestart + position - instart);root.right = myBuildTree(inorder, position + 1, inend,preorder, position - inend + preend + 1, preend);return root;}public TreeNode buildTree(int[] preorder, int[] inorder) {if (inorder.length != preorder.length) {return null;}return myBuildTree(inorder, 0, inorder.length - 1, preorder, 0, preorder.length - 1);} }【更多語言代碼參考】
LintCode 領扣?www.lintcode.com總結
以上是生活随笔為你收集整理的pat根据中序遍历和先序遍历_[leetcode/lintcode 题解] 前序遍历和中序遍历树构造二叉树...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 握手失败_主人用吃的训练小柴犬握手,老柯
- 下一篇: linux下qt环境的运行,在Linux