`
leidiqiu
  • 浏览: 132844 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

求二叉树某一层的所有节点及求二叉树的高度

 
阅读更多

1、输出二叉树某一层上所有的节点,一般用递归方式解决。

2、求二叉树的高度,也用递归方式解决。

 

/*

如何打印二叉树某一层上的所有节点?
如何求出二叉树的高度?

*/

#include <stdio.h>
#include <string.h>

struct Node{
	int value;
	Node *left;
	Node *right;
};

//构造二叉树
void createLR(Node *pn){
	if((pn->value)<50){
		Node *pl=new Node;
		Node *pr=new Node;
		pl->value=(pn->value)*2;
		pr->value=(pn->value)*2+1;
		pn->left=pl;
		pn->right=pr;
		createLR(pl);
		createLR(pr);
	}else{
		pn->left=NULL;
		pn->right=NULL;
	}
}

//打印二叉树某一层上的所有节点?
void level_sum_out(Node *p, int level){

	if(!p){
		return;
	}

	if(1==level){
		printf("%d ",p->value);
	}else{
		level_sum_out(p->left,level-1);
		level_sum_out(p->right,level-1);
	}
}

//如何求出二叉树的高度?
int getHeight(Node *p){
	if(NULL==p){
		return 0;
	}else{
		int lh=getHeight(p->left);
		int rh=getHeight(p->right);
		return (lh>rh)?(lh+1):(rh+1);
	}
}

void main(){

//	char a[]="abc";
//	int t=strlen(a);
//	t=sizeof(a); 

	//构造二叉树
	Node *pn=new Node;
	pn->value=1;
	createLR(pn);
    level_sum_out(pn,5);
	int height=getHeight(pn);
	printf("\n%d\n",height);


}

 

分享到:
评论

相关推荐

    二叉树的创建遍历以及求二叉树的高度程序源码

    二叉树的创建遍历以及求二叉树的高度程序源码 先序创建 前序遍历 树的层次

    二叉树指定第i层输出以及打印叶子结点

    二叉树指定第i层输出以及打印叶子结点,已ac过

    c代码-求二叉树的叶子节点和高度

    c代码-求二叉树的叶子节点和高度

    二叉树部分递归运算

    (5)统计二叉树的宽度,即在二叉树的各层上具有结点数最多的那一层上结点总数 (6)计算二叉树中各节点中的最大元素值 (7)交换每个结点的左孩子结点和右孩子结点 (8)从二叉树中删去所有叶子结点

    先序创建二叉树并遍历计算节点数

    先序创建二叉树并遍历计算节点数 先序创建二叉树并遍历计算节点数

    二叉树 基础

    而在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点,则此二叉树为完全二叉树。具有n个节点的完全二叉树的深度为log2n+1。深度为k的完全二叉树,至少有2^(k-...

    mfc二叉树的实现,涉及到增加节点等运算

    详细的给出了二叉树的建立,节点的增加与删除,很好的把二叉树的基本算法实现了。

    上机实验3-二叉树

    ①交换二叉树中所有节点的左右子树。(将结果输出至文本文件中) ②按层次顺序遍历二叉树:首先访问根节点,然后是它的两个孩子节点,然后是孙子节点,依此类推。(将结果输出至屏幕) 求二叉树的宽度,即同一层次上...

    二叉树的操作--递归非递归遍历、结点个数、树深度

    输入节点建立二叉树, 遍历递归的先中後序, 非递归的先中後序, 计算出深度 结点数 /* 运行结果: ------------------------ 请先序输入二叉树(如:ab三个空格表示a为根节点,b为左子树的二叉树) ab c 先序递归...

    树状显示二叉树和完全二叉树判断

    即第一层的两个节点的位置为(1,32-offset),(1,32+offset)即(1,16),(1,48)。 第二层:第二层的偏移量offset为screenwidth/23。第二层的四个节点的位置分别是(2,16-offset),(2,16+offset),(2,48-...

    二叉树java代码

    而在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点,则此二叉树为完全二叉树。具有n个节点的完全二叉树的深度为floor(log2n)+1。深度为k的完全二叉树,至少...

    第五章 树与二叉树

    二叉树的层序遍历是指从二叉树的第一层开始,从上之下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。 5.4 二叉树存储结构及实现 5.4.1 顺序存储结构 具体步骤: (1)将二叉树按完全二叉树编号。 (2)将...

    finesure2017#LeetCode-Py-1#剑指 Offer II 045. 二叉树最底层最左边的值1

    而「最底层」的「最左边」节点可以改变层序遍历的左右节点访问顺序。每层元素先访问右节点,在访问左节点,则最后一个遍历的元素就是「最底层」的「最左边」节点,即左下角

    Java实现 LeetCode 637 二叉树的层平均值(遍历树)

    给定一个非空二叉树, 返回一个由每层节点平均值组成的数组. 示例 1: 输入: 3 / \ 9 20 / \ 15 7 输出: [3, 14.5, 11] 解释: 第0层的平均值是 3, 第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11]. 注意: ...

    c语言 二叉树应用:创建、递归非递归遍历、计算结点、分支、交换子树

    输入相应元素,用先序创建二叉树(无元素处用“#”) 递归先序遍历二叉树: 递归中序遍历二叉树: 递归后序遍历二叉树: 非递归先序遍历二叉树: 非递归中序遍历二叉树: 非递归后序遍历二叉树: 非递归中序...

    二叉树家谱

    应位置,注意,针对某一父节点,添加第一个孩子和其它孩子的区别。 9、要求在孩子兄弟二叉树中按各个孩子的年龄进行排序。 10、将家谱树保存到二进制文件。注意,不能保存空白节点。 11、从文件读入家谱信息,...

    二叉树数据结构课程设计

    即第一层的两个节点的位置为(1,32-offset),(1,32+offset)即(1,16),(1,48)。 第二层:第二层的偏移量offset为screenwidth/23。第二层的四个节点的位置 分别是(2,16-offset),(2,16+offset),(2,48-...

    二叉树基本操作

    3、采用非递归的编程方法,分别统计二叉树的节点个数、度为1、度为2和叶子节点的个数,以及数据值的最大值和最小值。 4、(选作内容)试编写按层次顺序遍历二叉树的算法。参考算法思想:要采用一个队列q,先将二叉...

    二叉树的创建 遍历 交换子树

    2 编写将一棵二叉树的所有左右子树进行交换的算法。 提示:验证是否交换可以调用二叉树的遍历算法,比较输出结点序列。 3 编写一个主函数,将上面函数连在一起,构成一个完整的程序。 4 调试并运行实验源程序。

    打印二叉树的图 打印二叉树形状 打印二叉树路径 控制台打印二叉树 字符环境打印二叉树

    //打印一层结点,及该层结点与父结点的连线路径。 void PBSTNodePrint_char(PBSTNode *pb[],int n,int h) { int l=-1, r=0, i,j,k, end; char c; PBSTNode *p; if(n||h) { return;...

Global site tag (gtag.js) - Google Analytics