二叉樹的C 實現(涉及三種遍歷)

2021-10-04 02:55:08 字數 3604 閱讀 8963

開始之前,先回憶一下二叉樹的三種遍歷方式。

這棵樹的前序遍歷為:abdeghcf

中序遍歷:左子樹—> 根結點 —> 右子樹(在中間遍歷根節點)

這棵樹的中序遍歷為:dbgehacf

後序遍歷:左子樹 —> 右子樹 —> 根結點(最後遍歷根節點)

這棵樹的後序遍歷為:dghebfca

具體參考這位博主吧`

//  created by xiaobinbin on 2020/3/17.

//強調的是,引用很關鍵,品,你細品~

#include

using

namespace std;

template

<

class

t>

class

treenode

//日常好習慣,隨手建構函式一下。在涉及到有指標的成員時,最好重寫拷貝建構函式,=過載,防止多重析構};

//中序遍歷

template

<

class

t>

void

treeinorder

(treenode

* bt)

}//查詢,返回treenode*

template

<

class

t>

treenode

*search

(treenode

* bt,t k,treenode

*&p)

//注意這裡的引用呦,這裡的p主要就是記錄最後查詢的位置

return

null;}

//插入

template

<

class

t>

void

treeinsert

(treenode

*&bt,t k)

if(p&&k

>key)

p->lchild=r;

else

if(p&&p-

>key)

p->rchild=r;}}

//這裡的treenode* p也可以拿掉,直接用bt

template

<

class

t>

intdelete

(treenode

*&p)

else

if(p-

>rchild==

null

)else

p->key=s-

>key;

if(q!=p)

else

q->lchild=s-

>lchild;

}return1;

}template

<

class

t>

intdeletetree

(treenode

*&bt , t value)

}int

main

(int argc,

const

char

* ar**)

; treenode<

int>

*bt=

null

;for

(int i=

0;i<

14;i++

)treeinorder

(bt)

; cout << endl;

deletetree

(bt,16)

;deletetree

(bt,82)

;deletetree

(bt,73)

;int cc=

deletetree

(bt,70)

;treeinorder

(bt)

; cout<

cout<

return0;

}

#include

#include

using

namespace std;

typedef

char element;

struct treenode};

//建立一顆二叉樹,約定使用者遵照前序遍歷的方式輸入資料;遞迴的過程;

treenode*

createtree

(treenode* t)

return t;

}//訪問節點

void

visti

(char c,

int level)

//前序遍歷

void

preorder

(treenode* t,

int level)

}//中序遍歷

void

inorder

(treenode* t,

int level)

}//後序遍歷

void

afterorder

(treenode* t,

int level)

}//下面是非遞迴的三種遍歷方式

void

unpreorder

(treenode* t)

else}}

void

uninorder

(treenode* t)

treenode* temp=s.

top();

cout<

>data<<

" ";

s.pop();

t=temp-

>rchild;}}

//非遞迴的後續有點麻煩呀!!!默默又背了幾遍,哈哈哈哈哈

void

unafterorder

(treenode* t)

else}}

intmain()

//**一下下

abc~

~d~~e~

~c d b e a

#include

#include

using

namespace std;

string s1=

"abdce"

;//前序;

string s2=

"bdace"

;//中序;

string s3=

"dbeca"

;//後序;

//已知前序和中序,求後序

void

post

(int root,

int start ,

int end)

//已知中序和後序,求前序

void

pre(

int root,

int start ,

int end)

intmain()

我寫(照搬)上面**,也是為了理解。希望對你們有幫助。注釋不詳細,主要為了讓自己鞏固複習用的,嘿嘿嘿。一起加油!

二叉樹的三種遍歷

重新又看了一遍二叉樹 binary tree 發現很多東西自己還沒有弄明白,原來三種遍歷方式還不是自己想象中的那樣 前序遍歷 preorder 是先輸出自己,然後左,最後右。中序遍歷 inorder 是先左,再輸出自己,最後右。後序遍歷 postorder 是先左,再右,最後輸出自己。所謂的xx遍歷...

二叉樹的三種遍歷

在這裡說一下二叉樹的三種遍歷 前序,中序,後序 正文 前序遍歷 是指先從根開始,再依次找尋左子結點 右子結點。學習時的經驗就是 看圖學習 第乙份圖 這樣看來 1.先找最基本的根結點 詞窮 這裡是a。2.接著找以a為根結點的左子結點,這裡是b。3.而以b為根結點也會出現左右結點,這就又有了乙個左結點d...

二叉樹的三種遍歷

二叉樹是n n 0 個節點的有限集合,它或者是空樹 n 0 或者是有乙個根節點及兩顆不相交的且分別稱為左 右子樹的二叉樹所組成。可見,二叉樹同樣具有遞迴性質。特別需要注意的是,儘管樹和二叉樹的概念之間有許多聯絡,但它們是兩個不同的概念,樹和二叉樹之間最主要的區別是 二叉樹結點的子樹要區分左子樹和右子...