您的位置:首页 > 其它

二叉树基本操作--创建,三种遍历,叶子节点

2016-10-07 21:33 316 查看
虽然二叉树的操作很常见,但是认真写写熟悉很重要,特别是typedef,

CreateBiTree(BiTNode** T)指针的操作等等,还有就是创建方法,去实际输入值就知道其中的妙处,为-1时为空节点。


#include <iostream>
using namespace std;

//节点的定义
typedef struct BTNode
{
int data;
BTNode* rChild;
BTNode* lChild;
}BiTNode, *BiTree;

//二叉树的创建,先序创建二叉树
int CreateBiTree(BiTNode** T)
{
int ch;
cin >> ch;
if (ch==-1)
{
*T = nullptr;
return 0;
}
else
{
//*T = new BiTNode();
*T = (BiTNode*)malloc(sizeof(BiTNode));
if (T==nullptr)
{
cout << "failed!\n";
return 0;
}
else
{
(*T)->data = ch;
cout << "输入左子节点:";
//cin >> ch;
CreateBiTree(&(*T)->lChild);
cout << endl;
cout << "输入右子节点:";
//cin >> ch;
CreateBiTree(&(*T)->rChild);
}
}
return 1;
}

//先序遍历二叉树
void PreOrderBiTree(BiTNode* T)
{
if (T == nullptr)
{
return;
}
else
{
cout << T->data<<" ";
PreOrderBiTree(T->lChild);
PreOrderBiTree(T->rChild);
}
}

//中序遍历二叉树
void InOrderBiTree(BiTNode* T)
{
if (T == nullptr)
{
return;
}
else
{
InOrderBiTree(T->lChild);
cout << T->data << " ";
InOrderBiTree(T->rChild);
}
}

//后续遍历二叉树
void PostOrderBiTree(BiTNode* T)
{
if (T == nullptr)
{
return;
}
else
{
PostOrderBiTree(T->lChild);
PostOrderBiTree(T->rChild);
cout << T->data << " ";
}
}

//树高....

//叶子节点个数
int LeafCount(BiTNode* T)
{
static int count = 0;
if (T!=nullptr)
{
if (T->lChild==nullptr&&T->rChild==nullptr)
{
count++;
}
LeafCount(T->lChild);
LeafCount(T->rChild);
}
return count;
}

//客户端测试
int main()
{
BiTNode* T;
int leafCount = 0;
cout << "请输入第一个节点的值,-1表示没有节点:\n";
CreateBiTree(&T);

cout << "先序遍历二叉树:";
PreOrderBiTree(T);
cout << endl;

cout << "中序遍历二叉树:";
InOrderBiTree(T);
cout << endl;

cout << "后序遍历二叉树: ";
PostOrderBiTree(T);
cout << endl;

leafCount = LeafCount(T);
cout << "叶子节点的个数:" <<leafCount<< endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐