加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

【数据结构】二叉树的操作2

发布时间:2020-12-15 06:30:26 所属栏目:安全 来源:网络整理
导读:#include stdio.h#include stdlib.htypedef char ElemType;typedef struct BiTree{ ElemType elem;BiTree * LChild;BiTree * RChild;}BiTree,* PBiTree;/*先序顺序创建二叉树*/PBiTree CreateBiTree();/*先序顺序遍历二叉树*/void PreOrderTraverse(PBiTree
#include <stdio.h>
#include <stdlib.h>

typedef char ElemType;
typedef struct BiTree
{
    ElemType elem;
	BiTree * LChild;
	BiTree * RChild;
}BiTree,* PBiTree;

/*先序顺序创建二叉树*/
PBiTree CreateBiTree();
/*先序顺序遍历二叉树*/
void PreOrderTraverse(PBiTree T);
/*中序顺序遍历二叉树*/
void InOrderTraverse(PBiTree T);
/*后序顺序遍历二叉树*/
void PostOrderTraverse(PBiTree T);
/*遍历查找叶子节点*/
void TravelLeadNode(PBiTree T);
/*计算树的高度*/
int CountTreeHeight(PBiTree T);

int main()
{
	PBiTree Tree;
	int TreeHeight = 0;

	printf("按照先序顺序创建二叉树:n");
	Tree = CreateBiTree();
	
	printf("n按照先序顺序输出n");	
	PreOrderTraverse(Tree);
	
	printf("n按照中序顺序输出n");	
	InOrderTraverse(Tree);
	
	printf("n按照后序顺序输出n");	
	PostOrderTraverse(Tree);
	
	printf("n叶子结点为:n");
	TravelLeadNode(Tree);

	TreeHeight = CountTreeHeight(Tree);
	printf("n树的深度为:%dn",TreeHeight);
	
	return 0;
}

PBiTree CreateBiTree()
{
	PBiTree Tree = NULL;
	ElemType elem = '';
	scanf("%c",&elem);
	
	if (elem == '#')
	{
		Tree = NULL;
	}
	else
	{
		Tree = (PBiTree)malloc(sizeof(BiTree));
		Tree->elem = elem;
		Tree->LChild = CreateBiTree();
		Tree->RChild = CreateBiTree();
	}
	
	return Tree;
}


void PreOrderTraverse(PBiTree T)
{
	if (T != NULL)
	{
		printf("%c ",T->elem);
		
		PreOrderTraverse(T->LChild);
		PreOrderTraverse(T->RChild);
	}
	else 
		return;
}


void InOrderTraverse(PBiTree T)
{
	if (T != NULL)
	{
		if (T->LChild != NULL)
		{
			InOrderTraverse(T->LChild);
		}
		
		printf("%c ",T->elem);	
		InOrderTraverse(T->RChild);	
	}
}


void PostOrderTraverse(PBiTree T)
{
	if (T != NULL)
	{
		if (T->LChild != NULL)
		{
			PostOrderTraverse(T->LChild);
		}
		
		PostOrderTraverse(T->RChild);	
		printf("%c ",T->elem);
	}
}


void TravelLeadNode(PBiTree T)
{
	if (T != NULL)
	{
		if (T->LChild == NULL && T->RChild == NULL)
		{
			printf("%c ",T->elem);
		}
		
		TravelLeadNode(T->LChild);
		TravelLeadNode(T->RChild);
	}
}


int CountTreeHeight(PBiTree T)
{
	if (T != NULL)
	{
		return	CountTreeHeight(T->LChild) > CountTreeHeight(T->RChild) 
			? CountTreeHeight(T->LChild)+1 : CountTreeHeight(T->RChild)+1;
	}
	else
	{
		return 0;
	}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读