二叉树的创建、先序、中序以及后序遍历

二叉树结点结构与双链表结点结构式类似的,创建二叉树时,需清楚其结点结构。至于先序遍历、中序遍历以及后序遍历方法,采用思想都是递归的思想。

先创建如下二叉树(黄色中的0,当输入为0时,返回上一级,按先序方式创建二叉树)


输入顺序为: 1234000500607900800

先序遍历输出为: 123456798

中序遍历输出为:     432516978

后序遍历输出为:     435298761

程序代码为:

// Bitree.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>

using namespace std;
typedef int type;

//定义数结点
typedef struct bNode
{
	type data;
	struct bNode *lchild;
	struct bNode *rchild;
}bNode,*bTree;

//先序创建二叉树  
bTree CreateBitree(bTree &T)
{
	type ch;
	cin>>ch;
	if(0==ch)
	{
	 T=NULL;
	}
	else
	{
	   T=(bTree)malloc(sizeof(bNode));
	   if(NULL==T)
	   {
	     cout<<"申请内存失败!"<<endl;
		 return NULL;
	   }
	   T->data=ch;
	   CreateBitree(T->lchild);
	   CreateBitree(T->rchild);
	}

   return T;
}

//先序遍历
void PreOrder(bTree T)
{
	if(T)
	{
		cout<<T->data<<" ";
		PreOrder(T->lchild);
		PreOrder(T->rchild);
	}
}
//中序遍历
void InOrder(bTree T)
{
	if(T)
	{
		InOrder(T->lchild);
		cout<<T->data<<" ";
		InOrder(T->rchild);
	}
}

//后序遍历
void PostOrder(bTree T)
{
	   if(T)
	   {
		PostOrder(T->lchild);
		PostOrder(T->rchild);
		cout<<T->data<<" ";
	   }
}
int _tmain(int argc, _TCHAR* argv[])
{
	bTree T;
	CreateBitree(T);

	PreOrder(T);
	cout<<endl;
	InOrder(T);
	cout<<endl;
	PostOrder(T);

	return 0;
}

程序输出为:



计算树的深度,为左子树和右字树的最大深度加1

//计算树的深度
int TreeDepth(bTree T)
{
	if(!T)  return 0;
	int n1=TreeDepth(T->lchild);
	int n2=TreeDepth(T->rchild);

	return (n1>n2?n1:n2)+1;

}

结果为:


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在C语言中,可以使用指针和递归函数来实现二叉树先序中序后序遍历。 首先,我们需要定义一个二叉树的结构体,包含一个数据域和左右子树指针域: ```c typedef struct TreeNode { int data; struct TreeNode* left; struct TreeNode* right; } TreeNode; ``` 接下来,我们可以分别实现先序中序后序遍历的函数。 (1)先序遍历先序遍历是按照根节点、左子树、右子树的顺序进行遍历。 ```c void preorderTraversal(TreeNode* root) { if (root == NULL) return; printf("%d ", root->data); // 先访问根节点 preorderTraversal(root->left); // 遍历左子树 preorderTraversal(root->right); // 遍历右子树 } ``` (2)中序遍历中序遍历是按照左子树、根节点、右子树的顺序进行遍历。 ```c void inorderTraversal(TreeNode* root) { if (root == NULL) return; inorderTraversal(root->left); // 遍历左子树 printf("%d ", root->data); // 访问根节点 inorderTraversal(root->right); // 遍历右子树 } ``` (3)后序遍历后序遍历是按照左子树、右子树、根节点的顺序进行遍历。 ```c void postorderTraversal(TreeNode* root) { if (root == NULL) return; postorderTraversal(root->left); // 遍历左子树 postorderTraversal(root->right); // 遍历右子树 printf("%d ", root->data); // 访问根节点 } ``` 以上就是用C语言实现二叉树先序中序后序遍历的方法。这些遍历方法都是基于递归的,通过递归调用实现二叉树深度优先搜索。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值