重構二叉樹 (25 分)
給出兩個字串,分別表示二叉樹的先序遍歷(根、左子樹、右子樹)和中序遍歷(左子樹、根、右子樹)的結果。
例如,對於下面的二叉樹,先序遍歷結果是dbacegf,中序遍歷結果是abcdefg。
假定二叉樹的每個節點都用大寫的字母標識,且對於同一棵二叉樹,同乙個字母不會用兩次。現在請你根據給出的先序遍歷和中序遍歷,重構這棵二叉樹。
輸入格式:
輸入包含乙個或多個測試用例。每個測試用例一行,給出兩個字串,表示對二叉樹進行先序遍歷和中序遍歷的結果。這兩個字串都是由大寫字母組成(因此它們的長度不超過26)。
輸出格式:
將每個測試用例轉化為一棵二叉樹,並在一行中輸出樹的後序遍歷(左子樹、右子樹、根)的結果。
輸入樣例:
dbacegf abcdefg
bcad cbad
輸出樣例:
acbfged
cdab
#include#include#include
#include
using
namespace
std;
typedef
struct
node
tree;
char a[30],b[30
];tree *creattree(char *a,char *b,int r) //
定義返回指標位址的函式
return null; //
當前節點為空的時候返回null
}void printtree(tree *t) //
後序遍歷輸出此樹
intmain()
return0;
}
二叉樹重構
問題描述 根據前序遍歷結果和中序遍歷結果,重構二叉樹。1 前序遍歷結果的特點 假設當前的遍歷結果是完整的樹節點集合。那麼第乙個節點就是該樹的根節點,並且其後面的節點集合中,前半部分是其左子樹的節點集合,後半部分是其右子樹的節點集合。2 中序遍歷結果的特點 如果當前節點是當前樹的根節點,那麼該節點左邊...
重構二叉樹
重構二叉樹的思路主要是首先在前序 後序 序列中找到根結點,然後在中序序列中找到根結點所在的位置,該結點將整個序列分成兩個部分,前一部分為根結點的左子樹元素,後一部分為根結點的右子樹元素。再遞迴的生成左子樹和右子樹即可。1.通過前序,中序序列重構二叉樹 treenode buildtree vecto...
二叉樹重構
先驗知識 前序 第乙個數就是根節點 中序 根節點位於中間,剛好將其左右子樹分開 運用方法 遞迴 找到根節點,將其數值放入value,遞迴的分別根據左右子樹進行二叉樹重建 根據函式已有的介面,因此,需要將左 右 子樹的前序,中序分別用vector進行賦值 最後遞迴的對左右進行重建,方法一樣 關鍵 易錯...