大话数据结构之树

看了一下大话数据结构的树源码对应基础差的东西还是不太友好,这边写了一篇简单的。(个人观点)
在这里插入图片描述

例如:上面这一棵树写个简单关于树的代码实际树的运用还是围绕二叉树和红黑树展开

#include "pch.h"
#include <stdio.h>
#include <stdlib.h>


struct node
{
	int data;
	struct node*lchild;//左链域
	struct node*rchild;//右链域
};
typedef node  BiTNode;
typedef node*  BiTree;
typedef char chType;
//初始化根节点
BiTree Init_Tree(BiTNode*root)
{
	BiTree tree = root;
	return tree;
}
//创建节点
BiTNode*MakeNode(chType data, BiTNode*lchild, BiTNode*rchild)
{
	BiTNode*temp = (BiTNode*)malloc(sizeof(BiTNode));
	if (temp == NULL)
	{
		return NULL;
	}
	temp->data = data;
	temp->lchild = lchild;
	temp->rchild = rchild;
	return temp;

}
//释放节点

void Free_Node(BiTNode*pnode)
{
	if (pnode != NULL)
	{
		free(pnode);
		pnode = NULL;
	}
}
//销毁树
void Destroy_Free(BiTree tree)
{
	BiTNode*temp = tree;
	//左孩子不为空 递归释放
	if (temp->lchild != NULL)
	{
		Destroy_Free(temp->lchild);
	}
	if (temp->rchild != NULL)
	{
		Destroy_Free(temp->rchild);
	}
	Free_Node(temp);

}
//判断树是否为空
int Empty_Free(BiTree tree)
{
	if (tree == NULL)
	{
		return 0;
	}
	else
	{
		return 1;
	}
}
//2
//求树的深度
int GetDepth(BiTree tree)
{
	int left;
	int right;
	if (tree == NULL)
	{
		return 0;
	}

	left = GetDepth(tree->lchild);
	right = GetDepth(tree->rchild);
	return left > right ? (left + 1) : (right + 1);

}
//获取的树的根节点
BiTree Get_Free(BiTree tree)
{
	return tree;
}
//获取的树的节点
int Get_Node(BiTNode*node)
{
	return node->data;
}
//设置的树的节点
void Set_Node(BiTNode*node, chType data)
{
	node->data = data;
}
//设置的树的左孩子
BiTNode* Set_lchild(BiTNode*node, BiTNode*lchild)
{
	node->lchild = lchild;
	return lchild;
}
//获取的树的左孩子
BiTNode* Get_lchild(BiTNode*tree)
{
	if (tree == NULL)
	{
		return NULL;
	}
	return tree->lchild;
}

//设置的树的右孩子
BiTNode* Set_rchild(BiTNode*node, BiTNode*rchild)
{
	node->rchild = rchild;
	return rchild;
}
//获取的树的右孩子
BiTNode* Get_rchild(BiTNode*tree)
{
	if (tree == NULL)
	{
		return NULL;
	}
	return tree->rchild;
}

//插入子树
BiTree Insert_Child(BiTNode*parent, int lr, BiTNode*child)
{
	if (parent)
	{
		if (parent->lchild == NULL && lr == 0)
		{
			parent->lchild = child;
			return child;
		}
		if (parent->rchild == NULL && lr == 1)
		{
			parent->rchild = child;
			return child;
		}

	}
	return NULL;

}

//删除子树
void DeleteChild(BiTNode*parent, int lr)
{
	if (parent)
	{
		if (parent->lchild != NULL && lr == 0)
		{
			parent->lchild = NULL;
			Free_Node(parent->lchild);
		}
		if (parent->rchild != NULL && lr == 1)
		{
			parent->rchild = NULL;
			Free_Node(parent->rchild);
		}

	}


}
//中序遍历
void Middle_Print(BiTNode*head)
{
	if (head != NULL)
	{
		Middle_Print(head->lchild);
		printf("%c\n", head->data);
		Middle_Print(head->rchild);

	}
}


int main()
{

	BiTNode* node1 = MakeNode('D', NULL, NULL);
	BiTNode* node2 = MakeNode('B', node1, NULL);
	BiTNode* node3 = MakeNode('E', NULL, NULL);
	BiTNode* node4 = MakeNode('F', NULL, NULL);
	BiTNode* node5 = MakeNode('C', node3, node4);
	BiTNode* node6 = MakeNode('A', node2, node5);
	Middle_Print(node6);


	system("pause");
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值