链式二叉树--创建,计算叶结点,中序遍历,计算满结点,交换左右树(c)(头歌)

本段代码含有大量递归,请充分了解递归再查看 

#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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值