題目描述
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
解題思路
我們知道,前序遍歷的第乙個節點就是樹的根節點,所以我們先根據前序遍歷序列的第乙個數字建立根結點,接下來在中序遍歷序列中找到根結點的位置,根節點的左邊就是左子樹,右邊就是右子樹,這樣就能確定左、右子樹結點的數量。在前序遍歷和中序遍歷的序列中劃分了左、右子樹結點的值之後,就可以遞迴地去分別構建它的左右子樹。
/**
* 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 ...