劍指offer 重建二叉樹

2021-09-11 01:16:33 字數 884 閱讀 8788

題目描述

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

解題思路

我們知道,前序遍歷的第乙個節點就是樹的根節點,所以我們先根據前序遍歷序列的第乙個數字建立根結點,接下來在中序遍歷序列中找到根結點的位置,根節點的左邊就是左子樹,右邊就是右子樹,這樣就能確定左、右子樹結點的數量。在前序遍歷和中序遍歷的序列中劃分了左、右子樹結點的值之後,就可以遞迴地去分別構建它的左右子樹。

/**

* definition for binary tree

* public class treenode

* }*/public class solution

//前序遍歷陣列,遍歷的第乙個結點,遍歷的最後乙個結點;中序遍歷...

public treenode constructbinarytree(int pre, int ps, int pe,

int in, int is, int ie)

treenode root = new treenode(pre[ps]);

for(int i = is; i<=ie; i++)

}return root;

}}

constructbinarytree的引數是:前序遍歷陣列,前序起始索引,前序終點索引,中序遍歷陣列,中序起始索引,中序終點索引

在遞迴呼叫左子樹時需要思考的是第三個引數:它的值應為  根節點位置+左子樹大小

根節點位置:ps

左子樹大小:要從中序遍歷陣列中獲得,即尋找到的root節點位置i 減去 左子樹的起始索引is    【不能不減去起始索引,在遞迴呼叫右子樹時,起始位置改變】

劍指offer 重建二叉樹

重建二叉樹2.cpp 定義控制台應用程式的入口點。題目描述 輸入乙個二叉樹的前序遍歷和中序遍歷,輸出這顆二叉樹 思路 前序遍歷的第乙個節點一定是這個二叉樹的根節點,這個節點將二叉樹分為左右子樹兩個部分,然後進行遞迴求解 include stdafx.h include vector using na...

《劍指offer》重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,則重建二叉樹並返回。輸入乙個樹的前序和中序,例如輸入前序遍歷序列和中序遍歷序列 根據輸入的前序和中序,重建乙個該二叉樹,並返回該樹的根節點。definition for binary...

劍指offer 重建二叉樹

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。definition for binary tree struct treenode class solution if ...