演算法 給定二叉樹前序和中序序列重建二叉樹

2021-09-02 17:02:29 字數 1151 閱讀 5395

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

思路:前序序列第乙個肯定為root,設值為n,則在中序序列中n所在位置左邊的肯定是左子樹的元素,右邊的是右子樹的元素,因此,遞迴找root即可

public class solution 

public treenode reconstructbinarytree0(int pre, int prestart, int preend, int in, int instart, int inend)

int rootindex = indexof(in, instart, inend, pre[prestart]);

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

int leftprestart = prestart + 1;

int leftpreend = leftprestart + (rootindex - instart);

int leftinstart = instart;

int leftinend = rootindex;

// 構建左子樹

root.left = reconstructbinarytree0(pre, leftprestart, leftpreend, in, leftinstart, leftinend);

int rightprestart = leftpreend;

int rightpreend = preend;

int rightinstart = rootindex + 1;

int rightinend = inend;

// 構建右子樹

root.right = reconstructbinarytree0(pre, rightprestart, rightpreend, in, rightinstart, rightinend);

return root; }

// 找下標

public int indexof(int array, int start, int end, int value)

} return -1;

}}

重建二叉樹(前序,中序序列建樹)

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

重建二叉樹(前序和中序)

根據二叉樹的前序輸出和中序輸出重建這顆二叉樹 劍指offer上的一道題,思路 前序遇到的第乙個元素肯定是根節點,先建立乙個根節點,然後將這個值在中序序列中查詢他的位置用leftcount記錄,找到後將該值左面和右邊分別遞迴。include include include includeusing n...

二叉樹 前序和中序得到後序

二叉樹前序 遍歷順序為,根節點 左子樹 右子樹 中序 遍歷順序為,左子樹 根節點 右子樹 後序 遍歷順序為,左子樹 右子樹 根節點 可以發現,二叉樹前序中的第乙個節點為樹的根節點root,然後找出root在中序裡面的位置,就可以把前序和中序分別劃分為左 右子樹兩個部分,然後遞迴呼叫即可。舉個例子,前...