社区
数据结构与算法
帖子详情
这样求二叉树的深度是否合理?
csdn5211
2006-12-21 09:17:30
用先序非递归遍历,设置一个变量,每次进栈时加一,出栈时减一,如果当前访问节点是叶子节点,就把这个变量记录下来。最后求所有记录下来的最大值。
...全文
389
2
打赏
收藏
这样求二叉树的深度是否合理?
用先序非递归遍历,设置一个变量,每次进栈时加一,出栈时减一,如果当前访问节点是叶子节点,就把这个变量记录下来。最后求所有记录下来的最大值。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cjq87
2006-12-21
打赏
举报
回复
//栈的函数写的不是很好
//退栈的时候隐含了depth--
#include <stdio.h>
#include <malloc.h>
#define M 10 /* 假设二叉树最多的层数 */
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef struct Stack
{
char data;
BiTree * top;
BiTree * base;
}Stack;
void InitStack(Stack &S)
{
S.base=(BiTree *)malloc(sizeof(BiTree)*M);
S.top=S.base;
}
void push(Stack &S,BiTree p)
{
*S.top=p;
S.top++;
}
void pop(Stack &S,BiTree &p)
{
S.top--;
p=*S.top;
}
int StackEmpty(Stack S)
{
if(S.base==S.top)
return 1;
else
return 0;
}
void CreateBiTree(BiTree &T) /* 按先序序列建立一个二叉树 */
{
char c;
scanf("%c",&c);
if (c=='#')
T=NULL;
else
{
if (T)
{
T = (BiTNode *)malloc(sizeof(BiTNode));
T->data = c; /* 生成根结点 */
CreateBiTree(T->lchild); /* 构造左子树 */
CreateBiTree(T->rchild); /* 构造右子树 */
}
}
}
int DepthTree(BiTree &T)
{
BiTree p;
int depth, max;
Stack S;
InitStack(S);
p=T;
depth=max=0;
while(p||!StackEmpty(S))
{
if(p)
{
push(S,p);
p=p->lchild;
depth++;
if(max<depth)
max=depth;
}
else
{
pop(S,p);
p=p->rchild;
}
}
return max;
}
void main()
{
BiTree T;
printf("Please input(end with \"#\"):\n");
CreateBiTree(T);
printf("The depth of the tree is:");
printf("%d\n",DepthTree(T));
}
cjq87
2006-12-21
打赏
举报
回复
是合理的
我以前用这种方法编过这个程序
【数据结构】用三道
二叉树
题目搞懂如何在
二叉树
中运用递归
通过简单的三道
二叉树
题目搞清楚如何写递归函数
leetcode 111. Minimum Depth of Binary Tree(
求
二叉树
的最小
深度
,DFS,BFS)
题目要
求
给定一个
二叉树
,
求
其最小
深度
。 最大
深度
:从根结点到叶子结点包含的节点的最小个数。 注意: 叶子结点说的是一个没有孩子的节点。 注意和 解答:leetcode 104. Maximum Depth of Binary Tree (
求
二叉树
的最大
深度
,DFS,BFS)的不同!!!!!!!! 输入示例 Example: 输入一个
二叉树
[3,9,20,null,null,15,7], ...
LeetCode系列2:
求
二叉树
的直径
系列文章 LeetCode系列1、两数相加 文章目录题目分析代码示例总结 题目 题目链接 →→
二叉树
的直径 分析 根据题目的描述,可以简单理解为找到左右子树的最大
深度
,最大
深度
的两个节点之间的距离即为直径。换个思路,也就是
二叉树
运算中,
求
左右子树的最大
深度
。如图1所示: 从上图可以看出,以根...
深度
算法java_
求
二叉树
深度
的递归算法java
你知道java
求
二叉树
深度
的递归算法是怎样的吗?具体如何实现呢?下面要给大家带来的实例就是和这个方面相关的内容,一起来看一看吧。为了
求
树的
深度
,可以先
求
其左子树的
深度
和右子树的
深度
。用递归算法来实现,递归的出口就是节点为空,返回值为0。代码实现:importjava.util.LinkedList;publicclassDeep{//递归实现1publicintfindDeep(BiTr...
如何判断一个树
是否
是平衡
二叉树
判断一个树是二叉平衡树 平衡
二叉树
十是一种高度自平衡树,它的任何一个结点的左右子树的高度之差不会查过1。 递归方法:从定义个就可以写出一个递归的解法,先
求
左右子树
是否
平衡然后,再判断自己
是否
平衡。代码如下 class Solution { public: bool IsBalanced_Solution(TreeNode* pRoot) { if(pR...
数据结构与算法
33,025
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章