二叉树(2)之二叉树的基本操作(遍历,找节点个数)

二叉树(2)之二叉树的基本操作(遍历,找节点个数)

最难的也就是层次遍历:各种遍历函数其实就是各种递归。叶子节点,深度,总节点,掌握性质都不难‘’

层次遍历

层次遍历,就是从上到下一层一层的遍历 
例如:这里写图片描述


思路:

 

 

这里写图片描述

上代码:层次遍历暂时没用真正的队列不够原理上是一样的。(以后能力提高了在搞)

#include<algorithm> 
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue> 
using namespace std;
typedef struct bitnode//处理前面和这有关后面基本上和这无关 
{
	char  data;//shurudshuju
    struct	bitnode *lchild, *rchild; //houzaohanshu
}bitnode, *bittree;
void create(bittree &t)
{
	char c;
	cin >> c;
	if(c=='#')
		t = NULL ;
	else 
	{
		t=new bitnode;
		t->data = c;	
		create(t->lchild);
		create(t->rchild);
	 } 
}
void xianxu(bittree t)
{
	if(t==NULL)
		return ;
	else
	{
		cout<<t->data;
		xianxu(t->lchild);
		xianxu(t->rchild);
	}
}
void zhongxu(bittree t)
{
	if(t==NULL)
		return  ;
	else
	{
		zhongxu(t->lchild);
		cout<<t->data;
		zhongxu(t->rchild);
	} 
}
void houxu(bittree t)
{
	if(t==NULL)
		return ;
	else 
	{
		houxu(t->lchild);
		houxu(t->rchild);
		cout<<t->data;
	}
}
int deep(bittree t)
{
	int d1=0,d2=0;
	if(t==NULL)
		return 0;
	else 
	{
		d1=deep(t->lchild)+1;
		d2=deep(t->rchild)+1;
	}
	return d1>=d2?d1:d2;
}
//yezhishu
int yezhi(bittree t)
{
	if(t==NULL)
	return 0;
	if(t->lchild==NULL&&t->rchild==NULL)
	return 1;
	else 
	{
		return yezhi(t->lchild) + yezhi(t->rchild);
	}
}
int jiedian(bittree t)
{
	if(t == NULL)
	return 0;
	else
		return jiedian(t->lchild)+jiedian(t->rchild)+1;
}
void cengci(bittree t)
{
	bittree q;
	bittree queue[10];
	int front = 0, rear = 0;
	if(t == NULL)
		return ;
	else 
	{
		rear = (rear+1)%10;
		queue[rear]=t;
		while(front!=rear)
		{
			front=(front+1)%10;
			q=queue[front];
			cout<<q->data;
			if(q->lchild!=NULL)
			{
				rear=(rear+1)%10;
				queue[rear]=q->lchild;
			}
			if(q->rchild!=NULL)
			{
				rear = (rear+1)%10;
				queue[rear]=q->rchild;
			}
		}
	}
} 
int main()
{
	bittree T;
	cout<<"jianshu:"<<endl;
	create(T);
	cout<<endl;
	cout<<"qianxu:"<<endl;
	xianxu(T);
	cout<<endl;
	cout<<"zhongxu"<<endl;
	zhongxu(T);
	cout<<endl;
	cout<<"houxu"<<endl;
	houxu(T);
	cout<<endl;
	cout<<yezhi(T)<<" "<<jiedian(T)<<"  "<<deep(T)<<endl;
	cengci(T);
	return 0;
}
//ABC##DE#G##F###

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/114882.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • HTML5新控件 – 日期和时间选择输入

    HTML5新控件 – 日期和时间选择输入转载自:https://blog.csdn.net/u014063717/article/details/50914466HTML5定义了几个与日期有关的新控件。支持日期控件的浏览器会提供一个方便的下拉式日历,供用户选择。注意:我测试了Chrome和Opera,火狐提供下拉式日历支持,其它浏览器可能仍是一个普通文本框。1,日期控件-date&lt;inputtype="date"valu…

  • 时间单位换算表

    时间单位换算表 时间单位换算表   1毫秒=1/1,000秒(s)               1秒=1000毫秒(ms)1微秒(μs)=1/1,000,000秒(s)    1秒=1,000,000微秒(μs)1纳秒=1/1,000,000,000秒(s)       1秒=1,000,000,000纳秒(ns)1皮秒=1/1,000,000,000,000秒(s) 

  • C#WinForm窗体美化(IrisSkin皮肤插件的使用)

    C#WinForm窗体美化(IrisSkin皮肤插件的使用)C#皮肤美化插件

  • 微信每日早安推送「建议收藏」

    微信每日早安推送「建议收藏」七夕到啦,做一个程序员给女朋友的浪漫礼物吧。微信公众号推送。每日早安推送

  • java代码大全及详解_史上最全JVM大全详解!java程序员细节到极致的一次,魔鬼…

    java代码大全及详解_史上最全JVM大全详解!java程序员细节到极致的一次,魔鬼…前言作为Java的从业者,在找工作的时候,一定会被问及关于JVM相关的知识。JVM知识的掌握程度,在很多面试官眼里是候选人技术深度的一个重要评判标准。而大多数人可能没有对JVM的实际开发和使用经验,接下来这一系列文章将带你深入了解JVM需要掌握的各个知识点。这也将帮助你完成从初级程序员到高级程序员的转变。由于文章篇幅原因,文末有答案和解析目录线程(详解)JVM内存区域(详解)J…

  • 【电赛】2017年电赛A题——三相逆变电源EG8030测试

    【电赛】2017年电赛A题——三相逆变电源EG8030测试目录:一、相关介绍1.创建窗口【Tk】2.创建标签【Label】3.创建按钮【Button】二、简易滚动抽奖界面代码三、界面展示注:本文仅用于学习交流分享,[若有不妥之处,请指正,感谢]关键词:【电赛】【三项逆变电源】【EG8030】用到的工具有:AltiumDesigner16.0实现的功能有:①实现三相SPWM②实现三相交流电一、相关介绍SPWM:脉冲宽度按正…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号