先中序構建二叉樹

2021-07-30 22:52:18 字數 1050 閱讀 1477

資料結構學到二叉樹了。覺得有點難了。

大家都知道,先序+中序或者中序+後序才能確定一棵二叉樹。

這次用的是先序和中序構建二叉樹,再用層序遍歷輸出。

先序: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 binarytree;
由於stl中沒有樹。所以只能手寫啦、

我們知道二叉樹的構建是通過遞迴實現的。

binarytree *buildtree(int *pre,int *in,int n)

//下面的這個遞迴確定可以自己下去手寫模擬。

node->left=buildtree(pre+1,in,i0);

node->right=buildtree(pre+i0+1,in+i0+1,n-i0-1);

return node;//

}

這樣一趟下來我們就能在記憶體中,存下這個二叉樹啦。

現在就是要層序遍歷輸出它。

用乙個容器來存放資料。層序遍歷主要是用佇列實現。

void levelorder(binarytree *root)

if(temp->right!=0)} }

我們上述給的例子的確認過程應該這樣

後面左右子樹也依次類推、

左子樹又以10為結點繼續往下分析,右子樹以2為結點往下分析。

所以層序輸出時7 10 2 4 3 8 1 11

這裡定義的vector是全域性變數。

先序構建二叉樹及先序遍歷二叉樹

先序為dlr d 根節點,l 左子樹,r 右子樹 a b c d e 先序序列為abdce,輸入為abd c e 表示空格,代表空樹 輸入按滿二叉樹輸入 每乙個節點都是乙個子樹的根節點 void pre create tree treenode t else else void pre visit ...

先序構建二叉樹及先序遍歷二叉樹

先序為dlr d 根節點,l 左子樹,r 右子樹 a b c d e 先序序列為abdce,輸入為abd c e 表示空格,代表空樹 輸入按滿二叉樹輸入 每乙個節點都是乙個子樹的根節點 void pre create tree treenode t else else void pre visit ...

先序構建二叉樹 preorder

先序構建二叉樹 preorder 題目描述 樹的括號表示法 先將根結點放入一對圓括號中,然後把它的子樹按由左而右的順序放入括號中,而對子樹也採用同樣方法處理 同層子樹與它的根結點用一對圓括號括起來。例如下圖可寫成如下形式 輸入描述 輸入只有乙個字串,用括號表示法表示的一顆二叉樹。輸出描述 輸出以後一...