zz 二叉樹遍歷及C語言實現

2021-08-26 19:48:05 字數 3094 閱讀 7376

二叉樹遍歷及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 ...