本段代码含有大量递归,请充分了解递归再查看
#include <iostream>
using namespace std;
typedef char DataType;
//二叉树数据结构
struct node
{
DataType info; //存放结点数据
struct node* lchild, * rchild; //指向左右孩子的指针
};
typedef struct node* BiTree;
/*创建二叉树
函数名:createBiTree
参数:无
返回值:二叉树根结点指针
*/
BiTree createBiTree(void)
{
//请在此处填写代码, 完成二叉树和创建,返回值是二叉树的根结点指针
/********** Begin **********/
BiTree root;
char x;
cin >> x;
if (x == '#')
{
root = NULL;
}
else {
//root = new struct node;//同malloc
root = (BiTree)malloc(sizeof(struct node));
root->info = x;
root->lchild = createBiTree();
root->rchild = createBiTree();
}
return root;
/********** End *********/
}
int countLeaf(BiTree root)
{
//请在此处填写代码, 计算二叉树中树叶的个数
/********** Begin **********/
if (root == NULL)
{
return 0;
}
else if (!root->lchild && !root->rchild)
{
return 1;
}
else return countLeaf(root->lchild) + countLeaf(root->rchild);
/********** End **********/
}
void changeLR(BiTree root)
{
//请在此处填写代码, 完成二叉树左右子树互换
/********** Begin **********/
if (root == NULL)
{
return;
}
else {
BiTree temp;
temp = root->rchild;
root->rchild = root->lchild;
root->lchild = temp;
changeLR(root->lchild);
changeLR(root->rchild);
}
/********** End **********/
}
int countFullNode(BiTree root)
{
//请在此处填写代码,计算二叉树中满结点的个数
/********** Begin **********/
if (root == NULL)
{
return 0;
}
else if (!root->lchild && !root->rchild)
{
return 0;
}
else if (!root->lchild && root->rchild)
{
countFullNode(root->rchild);
}
else if (root->lchild && !root->rchild)
{
countFullNode(root->lchild);
}
else return 1 + countFullNode(root->lchild) + countFullNode(root->rchild);
/*********** End-**********/
}
void visit(BiTree T) //输出结点T的数据
{
cout << T->info;
}
void inOrder(BiTree root)
{
if (root == NULL) return;
inOrder(root->lchild);
visit(root);
inOrder(root->rchild);
}
int main(void)
{
BiTree root = createBiTree();
inOrder(root);
}