数据结构学习-(一)二叉树

来源:互联网 发布:什么软件可以看东森 编辑:程序博客网 时间:2024/06/18 07:17


二叉树基本代码:

BinTreeClass.h文件

#include<iostream>using namespace std;class Node{friend class BinTree;public:Node():lchild(0), rchild(0){}Node(int val, Node *lptr=0, Node *rptr=0){data = val;lchild = lptr;rchild = rptr;}int Getdata(){return data;}Node *Left(){return lchild;}Node *Right(){return rchild;}private:Node *lchild, *rchild;int data;};class BinTree//二叉排序树{public:BinTree():root(0){}~BinTree(){ Destroy(root);}void insertNode(int val){insertNode(root, val);}void PreOrder(){PreOrder(root);}void InOrder(){InOrder(root);}void PostOrder(){PostOrder(root);}int Depth(){return Depth(root);}int Size(){return Size(root);}int LeafCount(){return LeafCount(root);}private:Node *root;void insertNode(Node *&t, int val);//插入节点void PreOrder(Node *t);//前序遍历void InOrder(Node *t);//中序遍历void PostOrder(Node *t);//后序遍历void Destroy(Node *t);//销毁int Depth(Node *t);//树的深度int Size(Node *t);//树的节点数int LeafCount(Node *t);//树的叶节点数};void BinTree::insertNode(Node *&t, int val){if(t==0)t = new Node(val);else if(val < t->data)insertNode(t->lchild, val);elseinsertNode(t->rchild, val);}void BinTree::PreOrder(Node *t){if(t != 0){cout << t->data << ' ';PreOrder(t->lchild);PreOrder(t->rchild);}}void BinTree::InOrder(Node *t){if(t != 0){InOrder(t->lchild);cout << t->data << ' ';InOrder(t->rchild);}}void BinTree::PostOrder(Node *t){if(t != 0){PostOrder(t->lchild);PostOrder(t->rchild);cout << t->data << ' ';}}void BinTree::Destroy(Node *t){if(t != 0){Destroy(t->lchild);Destroy(t->rchild);delete t;}}int BinTree::Depth(Node *t){if(t==0)return -1;int dl=Depth(t->lchild);int dr=Depth(t->rchild);return 1 + (dl > dr ? dl : dr);}int BinTree::Size(Node *t){if(t==0)return 0;return 1+Size(t->lchild)+Size(t->rchild);}int BinTree::LeafCount(Node *t){if(t==0)return 0;if(t->lchild == NULL && t->rchild == NULL)return 1;elsereturn LeafCount(t->lchild)+LeafCount(t->rchild);}

Test.cpp文件

#include "BinTreeClass.h"void main(){BinTree BTree;int x;cout << "请输入10个整数:\n";for(int i=0; i<10; i++){cin >> x;BTree.insertNode(x);}cout << "先序遍历序列:\n";BTree.PreOrder();cout << "\n中序遍历序列:\n";BTree.InOrder();cout << "\n后序遍历序列:\n";BTree.PostOrder();cout << "\n二叉树的深度:\n";cout << BTree.Depth() << endl;cout << "\n二叉树的节点个数:\n";cout << BTree.Size() << endl;cout << "\n二叉树的叶节点个数:\n";cout << BTree.LeafCount() << endl;}



0 0
原创粉丝点击