C 二叉樹的基本操作

2021-10-04 10:46:33 字數 2804 閱讀 6111

對於一棵二叉樹,有三種基本遍歷方式:

1、前序遍歷(dlr):先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。

歸結為:從根結點一直從左子樹向下直到葉結點,然後返回到葉結點的父親,再從其父結點的右子樹向下。

2、中序遍歷(ldr):先中序遍歷左子樹,然後訪問根結點,最後遍歷右子樹。

3、後序遍歷(lrd):先後序遍歷左子樹,然後遍歷右子樹,最後訪問根結點。

對如上圖,遍歷結果如下:

前序遍歷的結果是abdehcfgi

中序遍歷的結果是dbehafcig

後序遍歷的結果是dhebfigca

一般情況下,當前結點的左孩子比當前結點值小,當前結點的右孩子比當前結點的值大。

1、插入:

1.1 插入結點的值比當前結點的值小,繼續找當前結點的左子樹,

1.2 插入結點的值比當前結點的值大,繼續找當前結點的右子樹,

1.3 找到合適的位置了,插入樹。

2、刪除:

2.1 刪除結點是葉子結點,直接將其刪除即可

2.2 刪除結點只有左孩子或者只有右孩子,將其孩子結點刪除,並將指向孩子結點的分支設定為空,c++是設定為null。不過更好的做法是,將孩子結點的值替換到當前結點,再刪除孩子結點即可。

2.3 刪除的結點同時含有左孩子與右孩子,需要找到刪除結點的後繼結點,將後繼結點作為當前結點。

#include using namespace std;

typedef int datatype;

//定義二叉樹節點

struct tree

;class btree

~btree()

//建立二叉樹並插入資料

void createbtree(datatype data);

//前序遍歷

void preorder(tree *);

//中序遍歷

void inorder(tree *);

//後序遍歷

void postorder(tree *);

//前序顯示

void displaypreorder();

//中序顯示

void displayinorder();

//後序顯示

void diaplaypostorder();

//統計二叉樹的個數

int counttree(tree *);

//統計葉子節點的個數

int countleaf(tree *);

};void btree::createbtree(datatype data)

else

if (backtree->data > data)

backtree->left = newnode;

else

backtree->right = newnode; }}

//先序遍歷(遞迴方法)

void btree::preorder(tree *temp)

}//中序遍歷(遞迴方法)

void btree::inorder(tree *temp)

}//後序遍歷(遞迴方法)

void btree::postorder(tree *temp)

}int btree::countleaf(tree *temp)

return n; }}

//前序遍歷顯示

void btree::displaypreorder()

//中序遍歷顯示

void btree::displayinorder()

//後序遍歷顯示

void btree::diaplaypostorder()

//統計二叉樹的個數

int btree::counttree(tree *temp)

void main();

int k;

k = sizeof(treearray) / sizeof(treearray[0]);

cout << "建立排序二叉樹順序: " << endl;

for (int i = 0; i < k; i++)

cout << endl;

cout << "二叉樹的節點個數:" << btree.counttree(btree.root) << endl;

cout << "二叉樹的葉子個數:" << btree.countleaf(btree.root) << endl;

cout << "二叉樹先序遍歷序列: " << endl;

btree.displaypreorder();

cout << "二叉樹中序遍歷序列: " << endl;

btree.displayinorder();

cout << "二叉樹後序遍歷序列: " << endl;

btree.diaplaypostorder();

system("pause");

}

說明:

資料插入規則:當前結點的左孩子比當前結點值小,當前結點的右孩子比當前結點的值大。

上述二叉樹的實際分支情況如下圖所示:

輸出結果如下圖所示:

《二叉樹c++實現》 : 

《c++ 二叉樹的實現》 : 

二叉樹的基本操作(C )

include include include using namespace std typedef char t 為本程式定義所使用的具體資料型別 struct btreenode btreenode class btree btree 建立二叉樹函式 函式功能 建立一棵二叉鏈式結構 函式引數 ...

C 二叉樹的基本操作

c 實現二叉樹的基本操作 包括 新增節點 刪除節點 前序遍歷 中序遍歷 後續遍歷 層序遍歷 最大值 最小值 二叉樹的高度 標頭檔案 include class tree linknode head 表頭節點 新增節點 void addtreenode linknode node,linknode n...

二叉樹基本操作

tree.h ifndef tree h define tree h include typedef int element 定義二叉樹 typedef struct nodetreenode void preorder treenode root 遞迴前序遍歷 void inorder treen...