輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
思路:前序序列第乙個肯定為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在中序裡面的位置,就可以把前序和中序分別劃分為左 右子樹兩個部分,然後遞迴呼叫即可。舉個例子,前...