首先根據定義,先序的第乙個元素為根節點,由於規定元素沒有重複,所以可以根據根節點數值來將中序遍歷陣列中左右子數分開。
同時根據左右子數的個數繼續拆分對應的先序陣列,遞迴左右子樹得到結果
/*** created by itworker365 on 5/12/2017. */
public
class
rebuildbtree ;
//左根右
int midtrace = ;
rebuildbtree rebuildbtree = new
rebuildbtree();
treenode treenode =rebuildbtree.reconstructbinarytree(pretrace, midtrace);
}public treenode reconstructbinarytree(int pre,int
in)
return reconstructbinarytree111(pre, 0, pre.length - 1, in, 0, in.length - 1);
}public treenode reconstructbinarytree111(int pre,int pstart, int pend, int in, int istart, int
iend)
treenode root=new
treenode(pre[pstart]);
//首先由先序遍歷知道第乙個元素肯定是根元素,遍歷中序找,找到根節點
//將中序結果分為兩個子子數,根據元素個數同時拆分先序陣列,分別構建左右子樹
for(int i = istart; i <= iend; i++)
if(in[i] ==pre[pstart])
return
root;
}}class
treenode
public
void
setleft(treenode left)
public
void
setright(treenode right)
}
根據中序和先序 後序 構建二叉樹
例 前序遍歷 gdafemhz 中序遍歷 adefghmz 畫樹求法 第一步,根據前序遍歷的特點,我們知道根結點為g 第二步,觀察中序遍歷adefghmz。其中root節點g左側的adef必然是root的左子樹,g右側的hmz必然是root的右子樹。第三步,觀察左子樹adef,左子樹的中的根節點必然...
先中序構建二叉樹
資料結構學到二叉樹了。覺得有點難了。大家都知道,先序 中序或者中序 後序才能確定一棵二叉樹。這次用的是先序和中序構建二叉樹,再用層序遍歷輸出。先序 7 10 4 3 1 2 8 11 中序 4 10 3 1 7 11 8 2 那麼層序就是 7 10 2 4 3 8 1 11 struct binar...
先序構建二叉樹及先序遍歷二叉樹
先序為dlr d 根節點,l 左子樹,r 右子樹 a b c d e 先序序列為abdce,輸入為abd c e 表示空格,代表空樹 輸入按滿二叉樹輸入 每乙個節點都是乙個子樹的根節點 void pre create tree treenode t else else void pre visit ...