二叉樹的各種遍歷過程

2021-10-06 09:42:32 字數 1659 閱讀 6069

目的:

領會二叉樹鏈式儲存結構,掌握二叉樹中各種基本運算的演算法設計;

領會二叉樹的各種遍歷過程,掌握遍歷演算法設計。

內容:編寫程式,實現二叉樹的各種基本運算和遍歷,並在此基礎上設計乙個程式,完成以下功能:

建立二叉樹bt,該二叉樹的括號表示串為

「a(b(d,e(h(j,k(l,m(,n))))),c(f,g(,i)))」;

輸出二叉樹bt;

輸出二叉樹的高度;

輸出二叉樹的葉子及個數;

輸出結點『h』的左右孩子的結點值;

7.輸出二叉樹的先序遍歷(遞迴和非遞迴)序列;

8.輸出二叉樹的中序遍歷(遞迴和非遞迴)序列;

9.輸出二叉樹的後序遍歷(遞迴和非遞迴)序列;

10.輸出二叉樹的層次遍歷序列;

#include

#include

#include

#include

using

namespace std;

typedef

struct node

bt;//建立二叉樹

bt*create

(char a)

}}return bt;

}//輸出二叉樹。先序遞迴

void

outbt

(bt *bt)

}//輸出二叉樹的高度

intbtheight

(bt *bt)

//輸出二叉樹的葉子及個數

intoutleaf

(bt *bt)

count +

=outleaf

(bt-

>l)

; count +

=outleaf

(bt-

>r)

;return count;

}//查詢節點

bt*find

(bt *bt,

char a)}}

//先序遍歷。非遞迴

void

preorder2

(bt *bt)}}

//中序。遞迴

void

inorder

(bt *bt)

}//中序。非遞迴

void

inorder2

(bt *bt)if(

!st.

empty()

)}}}

//後序遍歷。遞迴

void

postorder

(bt* bt)

}//後序遍歷。非遞迴

void

postorder2

(bt* bt)

r =null

; a =1;

while

(!st.

empty()

&& a ==1)

else}}

while

(!st.

empty()

);}}

//層次遍歷

二叉樹的各種遍歷

二叉樹 struct treenode void createtree treenode root 樹遞迴先序遍歷 void preorder treenode root 現將根節點入棧,然後以棧空為條件不斷出棧,每齣棧乙個元素,將其右孩子壓入棧,左孩子壓入棧 void nonrecursionpr...

二叉樹及其各種遍歷

樹形結構是一類重要的非線性資料結構,其中以樹和二叉樹最為常用。二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作 左子樹 left subtree 和 右子樹 right subtree 二叉樹常被用作二叉查詢樹和二叉堆或是二叉排序樹。二叉樹的每個結點至多只有二棵子樹 不存在度大於2的結點 ...

二叉樹 各種遍歷演算法

include include include using namespace std 二叉樹結點 typedef struct bitnodebitnode,bitree 按先序序列建立二叉樹 int createbitree bitree t else return 0 輸出 void visi...