求二叉树的深度(递归算法+非递归算法)

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
typedef struct bnode
{
    char data;
    struct bnode *lchild,*rchild;
}BNode,*bitree;

bitree pre_create()//创建二叉树
{
    bitree bt;
    char ch;
    ch=getchar();
    if(ch==' ')
        return NULL;
    else
    {
        bt=new BNode[sizeof(BNode)];
        bt->data=ch;
        bt->lchild=pre_create();
        bt->rchild=pre_create();
    }
}

int depth_Recursive(bitree bt)//递归算法
{
    int ldepth,rdepth;
    if(bt)
        return depth_Recursive(bt->lchild)>depth_Recursive(bt->rchild)?(depth_Recursive(bt->lchild)+1):(depth_Recursive(bt->rchild)+1);
    return 0;
}

int depth_Non_recursive(bitree bt)//利用队列进行非递归算法
{
    queue<bitree> q;
    bitree p=bt;
    int level=0,len;
    if(!bt)
        return 0;
    q.push(p);
    while(!q.empty())//每次只有把在同一层的所有结点出队以后才level++,因此要知道当前队列的长度,用l
### 二叉树深度递归算法流程 二叉树的最大深度是一个常见的问题,通常可以使用递归来解决。下面我将为你详细介绍该算法,并给出相应的伪代码描述其工作原理。 #### 算法步骤: 1. **基准条件**:如果当前节点为空,则返回0(空树的高度为0)。 2. **递归计算左右子树高度**: - 如果当前节点非空,则分别对左孩子、右孩子递归取它们各自所代表子树的最大深度。 3. **比较并加一**: - 取得上述两步得到的结果之后,选择较大的那个值加上1作为本层调用应该向上一层报告的答案。(因为从下往上看每经过一个新结点就增加了一层) #### 流程图说明: ``` +---------------------+ | | | Start |<---+ | | | +--------+------------+ | | | v | +--------------------+ | | | | | Check if Node is | Yes | | Empty (Null) |--->-+ | | No +----------+---------+ | V +-----------------------+ | | | Return Depth = 0 | | | +-----------------------+ | v +----------------------------------+ | | | Recursive Call for Left Subtree | | and Right Subtree | | | +-------------+--------------------+ | v +-------------------------------+ | | | Get Max(LeftDepth, RightDepht)| | Add One (+1) | | | +---------------+---------------+ | v +----------------------+ | | |Return Final Result | | | +----------------------+ ``` 这个简单的流程展示了如何通过递归的方式遍历整棵树并且最终确定它的最大深度。每个内部结点处我们都会向下探索直到触及叶子为止;每次回溯时携带的信息就是它底下那部分结构所能达到最深是多少层数再加上自身这一层计数即可。 实际上画出标准的图形化流程图需要专门的设计工具,在文本环境中难以完美呈现。你可以根据以上文字版流程结合实际需绘制适合自己的图表形式。 如果你想要具体的程序示例或更详细的解释,告诉我!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值