二叉树的创建与遍历(前,中,后)

二叉树创建与遍历

先给代码,解析在后面

#include <iostream>
using namespace std;
typedef struct shuju
{
	int s;
	struct shuju*r;
	struct shuju*l;
}sj;

sj*chuang()   //二叉树的创建
{
	int s;
	cin >> s;     //输入二叉树本节点的值
	if (s == -1) return NULL;   //如果输入的值为-1则返回上一节点
	sj*root = new sj;     //否则开辟节点接受该数据
	root->s = s;
	root->l = chuang();   //节点之下分左右两个小节点
	root->r = chuang();
	return root;      //返回根节点

}

//前序遍历根,左,右;
void printqian(sj*root)
{
	if (root == NULL) return ;      //如果根为空,结束
	cout << root->s << " ";         //把cout<<root->s当作“根,左,右”中的根
	printqian(root->l);             //把printqian(root->l);当作“根,左,右”中的左
	printqian(root->r);             //把printqian(root->r);当作“根,左,右”中的右
	return ;
}

 //中序遍历左,根,右;
void printzhong(sj*root)
{
	if (root == NULL) return;
	printzhong(root->l);
	cout << root->s << " ";
	printzhong(root->r);
	return;
}
//后序遍历左,右,根;
void printhou(sj*root)
{
	if (root == NULL) return;
	printhou(root->l);
	printhou(root->r);
	cout << root->s << " ";
	return;
}



int main()
{
	int s;
	sj*root = chuang();             //调用函数
	cout << "前序遍历为:"<< endl;
	printqian(root); cout << endl;  //调用函数
	cout << "中序遍历为:" << endl;
	printzhong(root); cout << endl; //调用函数
	cout << "后序遍历为:" << endl;
	printhou(root); cout << endl;   //调用函数
}

 图例:

 解析:

二叉树的创立是从左往右创立的

首先输入1  作为根节点 ,因为1!=  -1,所以开辟空间储存1;

之后到左边的路径输入 2 ,因为2!=  -1,所以开辟空间储存2;

再到2为节点的递归中在走左路径输入4,因为4!=   -1,所以开辟空间储存4;

再到4为节点的递归中在走左路径输入-1,因为-1==-1,所以返回上一节点4,再走右路径,输入-1,因为-1==-1,所以返回上一节点4,因为4左右输入完了,所以返回4 的上一节点2;再走2 的右路径......

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值