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层输出以及打印叶子结点,已ac过
c代码-求二叉树的叶子节点和高度
(5)统计二叉树的宽度,即在二叉树的各层上具有结点数最多的那一层上结点总数 (6)计算二叉树中各节点中的最大元素值 (7)交换每个结点的左孩子结点和右孩子结点 (8)从二叉树中删去所有叶子结点
先序创建二叉树并遍历计算节点数 先序创建二叉树并遍历计算节点数
而在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点,则此二叉树为完全二叉树。具有n个节点的完全二叉树的深度为log2n+1。深度为k的完全二叉树,至少有2^(k-...
详细的给出了二叉树的建立,节点的增加与删除,很好的把二叉树的基本算法实现了。
①交换二叉树中所有节点的左右子树。(将结果输出至文本文件中) ②按层次顺序遍历二叉树:首先访问根节点,然后是它的两个孩子节点,然后是孙子节点,依此类推。(将结果输出至屏幕) 求二叉树的宽度,即同一层次上...
输入节点建立二叉树, 遍历递归的先中後序, 非递归的先中後序, 计算出深度 结点数 /* 运行结果: ------------------------ 请先序输入二叉树(如: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-...
而在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点,则此二叉树为完全二叉树。具有n个节点的完全二叉树的深度为floor(log2n)+1。深度为k的完全二叉树,至少...
二叉树的层序遍历是指从二叉树的第一层开始,从上之下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。 5.4 二叉树存储结构及实现 5.4.1 顺序存储结构 具体步骤: (1)将二叉树按完全二叉树编号。 (2)将...
而「最底层」的「最左边」节点可以改变层序遍历的左右节点访问顺序。每层元素先访问右节点,在访问左节点,则最后一个遍历的元素就是「最底层」的「最左边」节点,即左下角
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组. 示例 1: 输入: 3 / \ 9 20 / \ 15 7 输出: [3, 14.5, 11] 解释: 第0层的平均值是 3, 第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11]. 注意: ...
输入相应元素,用先序创建二叉树(无元素处用“#”) 递归先序遍历二叉树: 递归中序遍历二叉树: 递归后序遍历二叉树: 非递归先序遍历二叉树: 非递归中序遍历二叉树: 非递归后序遍历二叉树: 非递归中序...
应位置,注意,针对某一父节点,添加第一个孩子和其它孩子的区别。 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;...