#include<iostream>
using namespace std;
#include<queue>//使用队列模板
class Node
{
public:
Node(char c):m_value(c),m_left(NULL),m_right(NULL){}
char m_value;
Node *m_left;
Node *m_right;
};
class Tree
{
public:
Tree(int flag):m_root(NULL),m_flag(flag){}
//void Create(Node *&root)
Node* Create(char *&str)//创建一颗树
{
if(*str == m_flag)
return NULL;
else
{
Node *p = new Node(*str);
p->m_left = Create(++str);
p->m_right = Create(++str);
return p;
}
}
void PreOrder(Node *root)前序遍历
{
if(root != NULL)
{
cout<<root->m_value<<" ";
PreOrder(root->m_left);
PreOrder(root->m_right);
}
}
void InOrder(Node *root)//中序遍历
{
if(root != NULL)
{
InOrder(root->m_left);
cout<<root->m_value<<" ";
InOrder(root->m_right);
}
}
void PostOrder(Node *root)//后序遍历
{
if(root != NULL)
{
PostOrder(root->m_left);
PostOrder(root->m_right);
cout<<root->m_value<<" ";
}
}
int Size(Node *root)//求树大小
{
if(root == NULL)
return 0;
else
return Size(root->m_left) + Size(root->m_right)+1;
}
int Height(Node *root)//求树高度
{
if(root == NULL)
return 0;
else
{
int m1 = Height(root->m_left);
int m2 = Height(root->m_right);
return m1 > m2 ? (m1+1) : (m2+1);
}
}
Node *Search(Node *root,char k)//查找一个节点
{
if(root==NULL)
return NULL;
if(root->m_value==k)
return root;
Node *t=Search(root->m_left,k);
if(t!=NULL)
return t;
return Search(root->m_right,k);
}
Node *Parent(Node *root,char k)//查找一个节点的父节点
{
if(root==NULL||root->m_value==k)
return NULL;
if((root->m_left!=NULL&&root->m_left->m_value==k)||(root->m_right!=NULL&&root->m_right->m_value==k))
return root;
Node *t=Parent(root->m_left,k);
if(t!=NULL)
return t;
return Parent(root->m_right,k);
}
void copy(Node *&root1,Node *root)//复制一颗树
{
if(root == NULL)
root1 = NULL;
else
{
root1 = new Node(root->m_value);//root1->m_value = root->m_root
copy(root1->m_left,root->m_left);
copy(root1->m_right,root->m_right);
}
}
void Level(Node *root)//层次遍历
{
if(root == NULL)
return;
queue<Node*> q;
Node *temp;
q.push(root);
while(!q.empty())
{
temp = q.front();
q.pop();
cout<<temp->m_value<<" ";
if(temp->m_left != NULL)
q.push(temp->m_left);
if(temp->m_right != NULL)
q.push(temp->m_right);
}
cout<<endl;
}
Node *m_root;
int m_flag;
};
利用队列模板“先进先出”的特点进行树的层次遍历
数据结构之C++实现二叉树(BinTree)(无主函数)
最新推荐文章于 2020-07-25 22:40:10 发布