對於一棵二叉樹,有三種基本遍歷方式:
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...