C++二叉树

C++二叉树

#include <iostream>
using namespace std;
class TreeNode {
public:
	char str;
	TreeNode* LeftNode;
	TreeNode* RightNode;
	
};
//遍历输出数节点
void PrintTreeNode(TreeNode*node) {
	if (node==NULL)//递归结束条件
	{
		return;
	}
	//先序遍历:先根再左再右
	/*cout << node->str<<" ";
	PrintTreeNode(node->LeftNode);
	PrintTreeNode(node->RightNode);*/
	//中序遍历:先左后根再右
	/*PrintTreeNode(node->LeftNode);
	cout << node->str << " ";
	PrintTreeNode(node->RightNode);*/
	//后序遍历:先左后右再根
	PrintTreeNode(node->LeftNode);
	PrintTreeNode(node->RightNode);
	cout << node->str << " ";
}
//求叶子数
void PrintTreeChildNode(TreeNode*node,int*p) {
	if (node == NULL)
	{
		return;
	}
	if (node->LeftNode==NULL&&node->RightNode==NULL)
	{
		++(*p);
		cout << node->str << " ";
	}
	//查找左子树
	PrintTreeChildNode(node->LeftNode, p);
	//查找右子树
	PrintTreeChildNode(node->RightNode, p);
}
//求树的高度
int PrinyTreeLenght(TreeNode*node) {
	if (node==NULL)
	{
		return 0;
	}
	int number = 0;
	int LeftNumber = PrinyTreeLenght(node->LeftNode);
	int RightNumber = PrinyTreeLenght(node->RightNode);
	number = (LeftNumber > RightNumber) ? LeftNumber + 1 : RightNumber + 1;
	return number;
}
//拷贝树
TreeNode*CopyTree(TreeNode*node) {
	if (node==NULL)
	{
		return NULL;
	}
	TreeNode* tree = new TreeNode;
	tree->str = node->str;
	tree->LeftNode = CopyTree(node->LeftNode);
	tree->RightNode = CopyTree(node->RightNode);
	return tree;
}
//释放树
void FreeTree(TreeNode*node) {
	if (node == NULL)
	{
		return;
	}
	FreeTree(node->LeftNode);
	FreeTree(node->RightNode);
	delete node;
}
int main(){
	TreeNode A = { 'A',NULL,NULL };
	TreeNode B = { 'B',NULL,NULL };
	TreeNode C = { 'C',NULL,NULL };
	TreeNode D = { 'D',NULL,NULL };
	TreeNode E = { 'E',NULL,NULL };
	TreeNode F = { 'F',NULL,NULL };
	TreeNode G = { 'G',NULL,NULL };
	TreeNode H = { 'H',NULL,NULL };
	TreeNode I = { 'I',NULL,NULL };
	TreeNode J = { 'J',NULL,NULL };
	A.LeftNode = &B;//创建树节点关系
	A.RightNode = &C;
	B.LeftNode = &D;
	B.RightNode = &E;
	D.LeftNode = &H;
	D.RightNode = &I;
	E.LeftNode = &J;
	C.LeftNode = &F;
	C.RightNode = &G;
	PrintTreeNode(&A);
	cout << endl;
	int num = 0;
	PrintTreeChildNode(&A, &num);
	cout << endl;
	cout << "叶子节点数目:" << num << endl;
	int number = PrinyTreeLenght(&A);
	cout << "树的高度:" << number << endl;
	TreeNode*newTree = CopyTree(&A);
	PrintTreeNode(newTree);
	cout << endl;
	FreeTree(newTree);
	return 0;
}

效果图:
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值