目的:
領會二叉樹鏈式儲存結構,掌握二叉樹中各種基本運算的演算法設計;
領會二叉樹的各種遍歷過程,掌握遍歷演算法設計。
內容:編寫程式,實現二叉樹的各種基本運算和遍歷,並在此基礎上設計乙個程式,完成以下功能:
建立二叉樹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...