二叉樹遍歷及c語言實現
已知中序和前序序列,或者已知中序和後序序列,都能夠構造一棵二叉樹。在本例中,本人用c語言寫程式解答了下面兩個演算法題:
(1)給出一棵二叉樹的中序與後序遍歷序列,求出它的先序遍歷序列。
(2)給出一棵二叉樹的中序與先序遍歷序列,求出它的後序遍歷序列。
知識點扼要回顧:
所謂二叉樹的遍歷,是指按一定的順序對二叉樹中的每個結點均訪問一次,且僅訪問一。按照根結點訪問位置的不同,通常把二叉樹的遍歷分為六種:
tlr(根左右), trl(根右左), ltr(左根右)
rtl(右根左), lrt(左右根), rlt(右左根)
其中,trl、rtl和rlt三種順序在左右子樹之間均是先右子樹後左子樹,這與人們先左後右的習慣不同,因此,往往不予採用。餘下的三種順序tlr、ltr和lrt根據根訪問的位置不同分別被稱為前序遍歷、中序遍歷和後序遍歷。
前序遍歷的規律是:輸出根結點,輸出左子樹,輸出右子樹;
中序遍歷的規律是:輸出左子樹,輸出根結點,輸出右子樹;
後序遍歷的規律是:輸出左子樹,輸出右子樹,輸出根結點;
不多說了,看**吧:)
#include
#include
using
namespace
std;
//儲存節點資料,為簡便起見,這裡選用字元
typedef
char
data_type;
typedef
struct
tagbinary_tree_node binary_tree_node, *lpbinary_tree_node;
struct
tagbinary_tree_node
; //
//函式名稱:treefrommidpost
//函式功能:給出一棵二叉樹的中序與後序序列,構造這棵二叉樹。
//輸入引數:lpbinary_tree_node & lpnode:二叉樹的結點
// string mid:儲存了二叉樹的中序序列的字串
// string post:儲存了二叉樹的後序序列的字串
// int lm, int rm:二叉樹的中序序列在陣列mid中的左右邊界
// int lp, int rp:二叉樹的後序序列在陣列post中的左右邊界
//void
treefrommidpost(lpbinary_tree_node & lpnode, string mid, string post,
intlm,
intrm,
intlp,
intrp)
intileftchildlen = pos - lm;
if(pos > lm)
//有左孩子,遞迴構造左子樹
if(pos
//有右孩子,遞迴構造右子樹
} ////函式名稱:treefrommidpre
//函式功能:給出一棵二叉樹的先序與中序序列,構造這棵二叉樹。
//輸入引數: binary_tree_node & lpnode:二叉樹的結點
// string mid:儲存了二叉樹的中序序列的字串
// string pre:儲存了二叉樹的先序序列的字串
// int lm, int rm:二叉樹的中序序列在陣列mid中的左右邊界
// int lp, int rp:二叉樹的先序序列在陣列pre中的左右邊界
//void
treefrommidpre(lpbinary_tree_node & lpnode, string mid, string pre,
intlm,
intrm,
intlp,
intrp)
intileftchildlen = pos - lm;
if(pos > lm)
//有左孩子,遞迴構造左子樹
if(pos
//有右孩子,遞迴構造右子樹
} //先序遍歷
void
preorder(lpbinary_tree_node p)
} //中序遍歷
void
midorder(lpbinary_tree_node p)
} //後序遍歷
void
postorder(lpbinary_tree_node p)
} //釋放二叉樹
void
release(lpbinary_tree_node lpnode)
} intmain(
intargc,
char
* argv)
(1)程式1的輸入方式:
已知二叉樹的中序與後序序列,求先序序列,請先輸入中序序列,回車後輸入後序序列:
例如輸入:
dgbaechf
gdbehfca
輸出:先序遍歷結果:abdgcefh
中序遍歷結果:dgbaechf
後序遍歷結果:gdbehfca
(2)程式2的輸入方式:
已知二叉樹的先序與中序序列,求後序序列,請先輸入先序序列,回車後輸入中序序列:
例如輸入:
abdefgc
debgfac
輸出:先序遍歷結果:abdefgc
中序遍歷結果:debgfac
後序遍歷結果:edgfbca
最後請看該程式執行效果圖:
這是程式1所確定的二叉樹圖:
這是程式2所確定的二叉樹圖:
,謝謝合作。
二叉樹遍歷及C語言實現
二叉樹遍歷及c 語言實現 已知中序和前序序列,或者已知中序和後序序列,都能夠構造一棵二叉樹。在本例中,本人用c 語言寫程式解答了下面兩個演算法題 1 給出一棵二叉樹的中序與後序遍歷序列,求出它的先序遍歷序列。2 給出一棵二叉樹的中序與先序遍歷序列,求出它的後序遍歷序列。知識點扼要回顧 所謂二叉樹的遍...
二叉樹的C語言實現及遍歷
樹是一種十分重要的基礎資料結構。很多實際問題都會抽象成樹來解決。而這篇文章要講的二叉樹則是樹中最基本又很重要的一種特殊樹。它只的是每個節點的度不大於2的樹。基於二叉樹還有很多衍生的樹。查詢樹,紅黑樹,平衡樹等等等等。二叉樹可以很形象的看做是乙個遞迴的產物。所以二叉樹的問題,基本都可以用遞迴來解決。無...
二叉樹遍歷 zz
二叉樹節點 public class btnode public btnode char key,btnode left,btnode right public char getkey public void setkey char key public btnode getleft public ...