二叉树的基本遍历操作
2011-08-25 19:22
435 查看
#include <queue> #include <iostream> using namespace std; #define QSIZE 100 struct BTree { int value; struct BTree* lChild; struct BTree* rChild; }; void VisitNode(BTree * T) { cout<<T->value<<" "; } BTree * Insert(BTree* T, int value) //T is the root of binary tree { if(T == NULL) { T = new BTree; if( T == NULL) cout<<"Malloc Failed."<<endl; else { T->value = value; T->lChild = T->rChild = NULL; } } else if(value < T->value) T->lChild = Insert(T->lChild,value); else if(value > T->value) T->rChild = Insert(T->rChild, value); return T; } BTree* MakeEmpty(BTree* T) { if(T != NULL) { MakeEmpty(T->lChild); MakeEmpty(T->rChild); delete T; } return NULL; } void LevelTraversal(BTree * T) { if(T == NULL) return; queue<BTree> Queue; Queue.push(*T); while(!Queue.empty()) { VisitNode(&Queue.front()); if(Queue.front().lChild != NULL) Queue.push(*Queue.front().lChild); if(Queue.front().rChild != NULL) Queue.push(*Queue.front().rChild); Queue.pop(); } } void PreOrder(BTree * T) { if(T == NULL) return; VisitNode(T); PreOrder(T->lChild); PreOrder(T->rChild); } void InOrder(BTree * T) { if(T == NULL) return; InOrder(T->lChild); VisitNode(T); InOrder(T->rChild); } void PosOrder(BTree * T) { if(T == NULL) return; PosOrder(T->lChild); PosOrder(T->rChild); VisitNode(T); } int HeightofBTree(BTree * T) { if(T == NULL) return 0; int hLeft = HeightofBTree(T->lChild); int hRight = HeightofBTree(T->rChild); return (hLeft > hRight ? hLeft : hRight) + 1; } int main() { BTree* T = NULL; T = Insert(T,45); T = Insert(T,21); T = Insert(T,65); T = Insert(T,10); T = Insert(T,50); T = Insert(T,70); T = Insert(T,24); cout<<"Level Traversal:"; LevelTraversal(T); cout<<endl; cout<<"Preorder Traversal:"; PreOrder(T); cout<<endl; cout<<"Inorder Traversal:"; InOrder(T); cout<<endl; cout<<"Posorder Traversal:"; PosOrder(T); cout<<endl; cout<<"Height of BTree is "<<HeightofBTree(T); MakeEmpty(T); cout<<endl; return 0; }
建立一个二分排序树,注意二叉树内存空间的递归释放。
相关文章推荐
- 二叉树基本操作 遍历
- 数据结构(C语言实现) - 二叉树的基本操作(建立,遍历,结点数,叶子结点数,高度,按树状打印,输出叶子结点等)
- 二叉树的基本操作(非递归前中后遍历,先序,表达式建树,复制二叉树)
- 二叉树的构造(二叉链表)、遍历以及基本操作
- 数据结构编程笔记十四:第六章 树和二叉树 二叉树基本操作及四种遍历算法的实现
- PHP数据结构之九 PHP储存二叉树,二叉树的创建与二叉树的基本操作 遍历二叉树算法
- 二叉树基本操作的递归实现(二叉树建立,先序,中序,后序,深度的递归遍历。广度优先,高度优先的非递归遍历)
- 二叉树基本操作--创建,三种遍历,叶子节点
- 实验三 二叉树的基本操作(建立)及遍历
- 实验三 二叉树的基本操作(建立)及遍历
- C++递归创建、非递归遍历二叉树的基本操作
- 二叉树的基本操作——遍历
- 7.4 7.5 二叉树的基本操作与遍历
- C二叉树的基本操作---创建、遍历、求深度、求叶子结点
- 【数据结构】二叉树的简单遍历及基本操作
- 二叉树基本操作及层次遍历
- 二叉树的先序、中序、后序遍历等基本操作c++实现
- 二叉树的基本操作(一)——二叉树的遍历
- 二叉树的基本操作(创建、递归和非递归遍历、求深度、求叶子数)
- 数据结构类型定义及基本操作汇总(二)-- 二叉树及其遍历