二叉树(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###

 

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言:字符数组的输入输出

    C语言:字符数组的输入输出目录用printf输出用scanf输入用gets输入用puts输出 用printf输出 输出方法1:printf逐个字符输出。  voidmain(void){   charc[ ]="Iamhappy";     inti;      for(i=0;i&lt;10;i++){ …

    2022年7月27日
    7
  • 如何求最长回文子串

    如何求最长回文子串回文字符串,就是像“12321”这种轴对称形式的字符串,系不系很简单呀(狗头)。但并不是所有的字符串都是这种整个串都是回文串的。有些计算机问题就是在一个字符串中找出一段最长的回文字符子串,这个时候时候,我们会很自然的想到一种暴力的方法来解决。1975年,一位叫Manacher的人发明了一个算法,这个算法是用来查找一个字符串的最长回文子串的方法。…

    2022年5月8日
    53
  • 有哪些域名可以提交备案

    有哪些域名可以提交备案

    2021年9月21日
    86
  • 谓词表示法表示猴子摘香蕉_猴子妈妈有14个香蕉

    谓词表示法表示猴子摘香蕉_猴子妈妈有14个香蕉案例:我们要实现以下步骤:这个案例共有以下几种情况,猴子香蕉箱子在同一处,猴子香蕉在同一处,香蕉箱子在同一出,还有三者均不在同一处,但不论是哪种情况,我们需要清楚一点就算是香蕉和猴子在同一位置,猴子也无法直接获得香蕉,因此我们第一步必须需要先找到箱子,然后再去搬着箱子移动到香蕉处。本案例中有以下四个谓词逻辑: Run(monkey,box)代表猴子去搬箱子 Getbox(monkey,box)代表猴子得到了箱子 Run(monkey,banana)代表了.

    2022年9月26日
    2
  • vim编辑器怎么显示行数(linux统计行数vim)

    Ubuntu系统16.04版本vim编辑器显示行数一种是临时显示。进入vim编辑器后,在命令行模式下,输入:set nu或者set number,按下回车后,就会显示行数。输入:set nonu,就会隐藏行数。此方法,在关闭当前vim后再次打开vim编辑器,行数就会消失,需要再次输入上述命令。一种是永久显示。想要开机后再次打开vim编辑器一直显示行数,就需要修改vim的

    2022年4月11日
    45
  • CSS3点赞动画特效源码下载

    体验效果:http://hovertree.com/texiao/jquery/62/效果图:下载:http://hovertree.com/h/bjaf/1dvh9ym6.htm特效库:http

    2021年12月22日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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