#include#include#define maxsize 20
#define treesize 7
typedef char elemtype;
typedef struct btnode
btnode, *btree;
elemtype pre[maxsize] = ;
elemtype in[maxsize] = ;
btnode *getbtnode();//返回乙個二叉樹節點
btnode *getbtnodebykey(elemtype key);
btree createbtreebyprein(char pre, char in, int n);//通過前序中序建立乙個二叉樹
void printarr(elemtype arr, int n);//輸出乙個陣列
void visit(btnode *btnode);//輸出某一節點資料
void preorder(btree btree); //前序遍歷
void inorder(btree btree); //中序遍歷
void postorder(btree btree);//後序遍歷
void showtree(btree btree);//靜態輸出二叉樹圖形
int main()
//通過前序中序建立乙個二叉樹
btree createbtreebyprein(elemtype pre, elemtype in, int n)
// 此時 k 為根節點在中序遍歷中的位置的陣列下標
if (n == 0)
else
return bt;
}//輸出乙個陣列
void printarr(elemtype arr, int n)
}void visit(btnode *btnode)
btnode *getbtnode()
btnode *getbtnodebykey(elemtype key)
void showtree(btree btree)
void preorder(btree btree)
}void inorder(btree btree)
}void postorder(btree btree)
}
前序遍歷和中序遍歷重建二叉樹
根據先序序列和中序序列的特點我們可以知道 1 先序的第乙個節點是根節點 2 在中序序列中,根結點前邊的結點都是左子樹中的,根結點右邊的結點都是右子樹中的 3 通過左右子樹的中序序列帶入前序序列可以求出左右子樹的前序序列 4 左右子樹的前序序列第乙個元素分別是根節點的左右孩子 5 可以遞迴上述步驟來重...
二叉樹 由前序遍歷和中序遍歷重建二叉樹
由前序遍歷和中序遍歷重建二叉樹 前序序列 1 2 3 4 5 6 中序序列 3 2 4 1 6 5 思路 前序遍歷第乙個是根節點。中序遍歷根節點左側為左子樹,根右側為右子樹。那麼先構造根節點,根節點左側都為左子樹,根右側都為右子樹。然後對左右子樹遞迴式的構造即可。封裝 binarytreenode ...
根據二叉樹的前序遍歷和中序遍歷構造二叉樹
題 給出某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列pre 和中序遍歷序列in 則重建二叉樹並返回。思路 令pi pre 0 由二叉樹的前序遍歷特性可知pi為二叉樹的根節點root,遍歷in,得到in j pi的下標...