c++二叉树(一)二叉树的建立与遍历

24 篇文章 0 订阅

树是一种常用的数据结构,也是必须掌握的数据结构,最近准备几篇博客梳理一下自己对树的学习,也复习一下c++。
首先对于树的设计,无非就是本身数据加上左孩子右孩子两个指针。

struct node
{
	int num;
	node *left;
	node *right;
};

有了节点,我们又要怎么建树呢?
这里笔者提供两种建树方法
第一种

node* createtree(int a[],int n)
{
	static int k=0;
	node *head=new node;
	head->left=NULL;
	head->right=NULL;
	head->num=a[k++];
if(k<n)	head->left=createtree(a,n);
if(k<n)	head->right=createtree(a,n);
	return head;
	
}

这种方法其实是错误的,会建出一个只有左支的单叉树,没意识到的同学要注意了。
第二种

node* createtree(int a[],int i,int n)
{
	node *head=new node;
	head->left=NULL;
	head->right=NULL;
	head->num=a[i];
if(i*2+1<n)	head->left=createtree(a,i*2+1,n);
if(i*2+2<n)	head->right=createtree(a,i*2+2,n);
	return head;
	
}

在这里插入图片描述
看不懂上面的i*2+1的同学看这张图
接下来我们再介绍一下怎么遍历二叉树。
其实都是非常简单的递归,想起来挺难,但一看就懂

void prinfnode1(node *head)//从上到下输出
{
cout<<head->num<<endl;
if(head->left!=NULL)	prinfnode1(head->left);
if(head->right!=NULL)	prinfnode1(head->right);
}
void prinfnode2(node *head)//从左到右输出
{
	
if(head->left!=NULL)	prinfnode2(head->left);
cout<<head->num<<endl;
if(head->right!=NULL)	prinfnode2(head->right);
}
void prinfnode3(node *head)//从下往上输出
{

if(head->left!=NULL)	prinfnode3(head->left);
if(head->right!=NULL)	prinfnode3(head->right);
cout<<head->num<<endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值