1.简析二叉树
1.1 定义
二叉树的定义网上一搜就有,简而言之,是每个节点最多只有两个孩子节点,左边的节点是左孩子,右边的节点是右孩子。
1.2 本文简单实现的二叉树算法
- 二叉树的构建
- 先序遍历
- 中序遍历
- 后序遍历
- 求叶子节点
1.3测试用例图
1. 用例
2.代码
#include <iostream>
using namespace std;
class Node
{
public:
char data;//存的数据
Node* left;//左孩子
Node* right;//右孩子
};
Node *root;//根节点
int leafCounter = 0; //叶子个数
//根据先序序列创建二叉树
void Create(Node* &T)
{
char buffer=' ';
cin>>buffer;
if (buffer == '#')
{
T = NULL;
}
else
{
T = new Node();
T->data = buffer;
Create(T->left);
Create(T->right);
}
}
/*先序遍历 */
void preorder(Node* &T)
{
if (T)
{
cout<<T->data<<" ";
preorder(T->left);
preorder(T->right);
}
}
/*中序遍历 */
void inorder(Node* &T)
{
if (T)
{
inorder(T->left);
cout<<T->data<<" ";
inorder(T->right);
}
}
/*后序遍历*/
void postorder(Node* &T)
{
if (T)
{
postorder(T->left);
postorder(T->right);
cout<<T->data<<" ";
}
}
/*求叶子节点的个数,并输出*/
void leaf(Node* &T)//
{
if (T)
{
if (!T->left && !T->right)//如果没有孩子节点,则这个节点为叶子
{
cout<<T->data<<" ";
leafCounter++;
}
else
{
leaf(T->left);
leaf(T->right);
}
}
}
int main()
{
cout<<"请输入前序序列(ab##c##):";
Create(root);
cout<<"前序遍历 :";
preorder(root);
cout<<endl;
cout<<"中序遍历 :";
inorder(root);
cout<<endl;
cout<<"后序遍历 :";
postorder(root);
cout<<endl;
cout<<"叶子节点 :";
leaf(root);
cout<<endl;
cout<<"叶子数为:"<<leafCounter;
}
4.测试结果
编译器为DEVC++ 5.40
2.测试结果