日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pat根据中序遍历和先序遍历_[leetcode/lintcode 题解] 前序遍历和中序遍历树构造二叉树...

發布時間:2025/3/11 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 题解] 前序遍历和中序遍历树构造二叉树...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。