/*
name: 根據先中序序列或後中序序列確定二叉樹
author: 巧若拙
date: 03-10-14 11:25
description:
根據先中序序列或後中序序列確定二叉樹,各種順序遍歷二叉樹檢查結果。
根據先中序序列生成二叉樹:從先序序列中找到二叉樹(或者子樹)的根結點,然後在中序序列找到該根結點,
根結點將中序序列分成左右兩部分,左邊為左子樹,右邊為右子樹。
根據中序序列確定左子樹的長度,確定左子樹中最右下結點在先序序列中的位置,
從而可以確定左右子樹在先中序序列中的範圍,然後遞迴的生成左右子樹。
根據後中序序列生成二叉樹:從後序序列中找到二叉樹(或者子樹)的根結點,然後在中序序列找到該根結點,
根結點將中序序列分成左右兩部分,左邊為左子樹,右邊為右子樹。
根據中序序列確定左子樹的長度,確定左子樹中最右下根結點在後序序列中的位置,
從而可以確定左右子樹在後中序序列中的範圍,然後遞迴的生成左右子樹。
*/#include
#include
#include
#include
#include
#define maxsize 100
#define ok 1
#define error 0
#define true 1
#define false 0
#define link 0 //link:指標
#define thread 1 //thread:線索
typedef char elemtype;
typedef int status; //函式型別,其值是函式結果狀態**,如ok等
typedef struct bitreenode bitreenode, *bitree;
void preorderprint(bitree p); //先序遍歷輸出結點(遞迴)
void inorderprint(bitree p); //中序遍歷輸出結點(遞迴)
void postorderprint(bitree p); //後序遍歷輸出結點(遞迴)
bitree bitreebypreind(elemtype pre, elemtype ind, int preleft, int preright, int indleft, int indright);//根據先序和中序序列生成一棵二叉樹
bitree bitreebypostind(elemtype post, elemtype ind, int postleft, int postright, int indleft, int indright);//根據後序和中序序列生成一棵二叉樹
int main(void)
bitree bitreebypreind(elemtype pre, elemtype ind, int preleft, int preright, int indleft, int indright)//根據先序和中序序列生成一棵二叉樹
head->data = pre[preleft];
root = indleft;
while (ind[root] != pre[preleft]) //在中序序列中查詢根結點
root++;
right = preleft + root - indleft; //right為左子樹中最右下結點在前序序列中的位置
head->lchild = bitreebypreind(pre, ind, preleft+1, right, indleft, root-1);//生成左子樹
head->rchild = bitreebypreind(pre, ind, right+1, preright, root+1, indright);//生成右子樹
}return head;
} bitree bitreebypostind(elemtype post, elemtype ind, int postleft, int postright, int indleft, int indright)//根據後序和中序序列生成一棵二叉樹
head->data = post[postright];
root = indleft;
while (ind[root] != post[postright]) //在中序序列中查詢根結點
root++;
left = postleft + root - indleft - 1; //left為左子樹中根結點在後序序列中的位置
head->lchild = bitreebypostind(post, ind, postleft, left, indleft, root-1);
//生成左子樹
head->rchild = bitreebypostind(post, ind, left+1, postright-1, root+1, indright);//生成右子樹
}return head;
} void preorderprint(bitree p) //先序遍歷輸出結點(遞迴)
}void inorderprint(bitree p) //中序遍歷輸出結點(遞迴)
}void postorderprint(bitree p) //後序遍歷輸出結點(遞迴)
}
資料結構之樹 根據先序序列和中序序列確定樹
假設某二bai叉樹的先序遍歷序列du是abdgcefh,中序遍歷序列是dgbaechf,畫出zhi二叉樹,並給出其後序遍dao歷序列。分析過程 以下面的例題為例進行講解 已知一棵二叉樹的先序遍歷序列和中序遍歷序列分別是abdgcefh dgbaechf,求二叉樹及後序遍歷序列。分析 先序遍歷序列的第...
根據先序序列和中序,後序和中序序列建立二叉樹
思考 如何才能確定一棵樹?結論 通過中序遍歷和先序遍歷可以確定乙個樹 通過中序遍歷和後續遍歷可以確定乙個樹 通過先序遍歷和後序遍歷確定不了乙個樹。演算法實現 一 先序和中序重建二叉樹,按層次遍歷輸出 include include include include include include in...
根據先序序列和中序序列求後序序列的迴圈實現
1 include2 include3 include4 include5 6using namespace std 78 設計樹的資料模型 9 start 1011 template class t 12class treeseq public vector13 1819 template cla...