從前序遍歷和中序遍歷重建乙個二叉樹。
步驟如下:
1、根據前序遍歷的第乙個元素建立根節點
2、在中序遍歷找到這個元素,左邊的元素都是根節點的左子樹的結點,右邊的元素都是右子樹的結點
3、在前序遍歷中找到屬於左右子樹的前序序列
4、左子樹重複123
5、右子樹重複123
6、返回根節點
例如前序遍歷序列和中序遍歷序列
1、根節點 1
2、中序遍歷中找到 1 ,左邊4,7,2都是左子樹的結點,右邊5,3,8,6都是右子樹的結點
3、左子樹的前序序列2,4,7,右子樹的前序序列3,5,6,8
4,左子樹的根節點 2,左子樹的結點4,7,右子樹的結點 null
5,右子樹的根節點 3,左子樹的結點5,右子樹的結點8,6
最後得到:
2 3
4 null 5 6
null 7 null null 8 null
上**。
/**
* definition for binary tree
* public class treenode
* }*/public class solution
treenode node = new treenode(pre[0]);
int index = 0;
for(; index < in.length; index++)
}int newpre = new int[index];
int newin = new int[index];
for(int i = 0; i < index; i++)
for(int i = 0; i < index; i++)
node.left = reconstructbinarytree(newpre, newin);
newpre = new int[pre.length - index - 1];
newin = new int[in.length - index - 1];
for(int i = 0; i < pre.length - index - 1; i++)
for(int i = 0; i < in.length - index - 1; i++)
node.right = reconstructbinarytree(newpre, newin);
return node;
}}
重建二叉樹 牛客
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。首先講一下對二叉樹幾種遍歷的記憶理解方法,主要是結點的序列位置不同。根據前序遍歷的特點,樹的根結點一定在第一位 中序遍歷的特點,根結...
牛客網 二叉樹
如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹中共有4個...
牛客網 對稱二叉樹(遞迴)
一棵有點權的有根樹如果滿足以下條件,則被軒軒稱為對稱二叉樹 1.二叉樹 2.將這棵樹所有節點的左右子樹交換,新樹和原樹對應位置的結構相同且點權相等。下圖中節點內的數字為權值,節點外的 id 表示節點編號。現在給出一棵二叉樹,希望你找出它的一棵子樹,該子樹為對稱二叉樹,且節點數 最多。請輸出這棵子樹的...