递归实现基本思想:

为了求得树的深度,可以先求左右子树的深度,取二者较大者加1即是树的深度,递归返回的条件是若节点为空,返回0

算法:

int FindTreeDeep(BinTree BT){int deep=0;if(BT){int lchilddeep=FindTreeDeep(BT->lchild);int rchilddeep=FindTreeDeep(BT->rchild);deep=lchilddeep>=rchilddeep?lchilddeep+1:rchilddeep+1;}return deep;}

非递归实现基本思想:

受后续遍历二叉树思想的启发,想到可以利用后续遍历的方法来求二叉树的深度,在每一次输出的地方替换成算栈S的大小,遍历结束后最大的栈S长度即是栈的深度。

算法的执行步骤如下:

(1)当树非空时,将指针p指向根节点,p为当前节点指针。

(2)将p压入栈S中,0压入栈tag中,并令p执行其左孩子。

(3)重复步骤(2),直到p为空。

(4)如果tag栈中的栈顶元素为1,跳至步骤(6)。从右子树返回

(5)如果tag栈中的栈顶元素为0,跳至步骤(7)。从左子树返回

(6)比较treedeep与栈的深度,取较大的赋给treedeep,对栈S和栈tag出栈操作,p指向NULL,并跳至步骤(8)。

(7)将p指向栈S栈顶元素的右孩子,弹出栈tag,并把1压入栈tag。(另外一种方法,直接修改栈tag栈顶的值为1也可以)

(8)循环(2)~(7),直到栈为空并且p为空

(9)返回treedeep,结束遍历

int TreeDeep(BinTree BT ){int treedeep=0;stack S;stack tag;BinTree p=BT;while(p!=NULL||!isEmpty(S)){while(p!=NULL){push(S,p);push(tag,0);p=p->lchild;}if(Top(tag)==1){deeptree=deeptree>S.length?deeptree:S.length;pop(S);pop(tag);p=NULL;}else{p=Top(S);p=p->rchild;pop(tag);push(tag,1);}}return deeptree;}

二叉树的深度(递归+非递归)相关推荐

  1. 【代码+注释】求二叉树的深度【超详细】递归+非递归实现

    编写算法求出二叉树的深度(层数) 二叉树的深度是指从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.本文将用两种方式求出二叉树的深度 第一种:无可置疑是递归 核 ...

  2. 二叉树的深度(前序 中序 后序 递归非递归搜素)、广度、搜索 C++

    a b c 使用 1 2 3 表示 /* 描述:二叉树的深度(前序 中序 后序 递归非递归搜素).广度.搜索 作者:jz 日期:20140819 */ #include<stdio.h> ...

  3. 实现二叉树的三种非递归遍历算法

    [问题描述] 编写程序,实现二叉树的三种非递归遍历算法:先序非递归,中序非递归,后序非递归. [输入形式] 输入建树序列. [输出形式] 输出三种遍历序列. [样例输入] A B C # # # # ...

  4. java 建树源码_Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】...

    import java.util.ArrayDeque; import java.util.Queue; import java.util.Stack; //二叉树的建树,前中后 递归非递归遍历 层序 ...

  5. 二叉树(2)——遍历的非递归实现

    2019独角兽企业重金招聘Python工程师标准>>> 算法概述 递归算法简洁明了.可读性好,但与非递归算法相比要消耗更多的时间和存储空间.为提高效率,我们可采用一种非递归的二叉树遍 ...

  6. 二叉树打印叶子节点,非递归_使用递归打印链接列表中的备用节点

    二叉树打印叶子节点,非递归 Solution: 解: Input: A singly linked list whose address of the first node is stored in ...

  7. java二叉树深度优先遍历会考不递归的吗_树的广度优先遍历和深度优先遍历(递归非递归、Java实现)...

    在编程生活中,我们总会遇见树性结构,这几天刚好需要对树形结构操作,就记录下自己的操作方式以及过程.现在假设有一颗这样树,(是不是二叉树都没关系,原理都是一样的) 1.广度优先遍历 英文缩写为BFS即B ...

  8. 二叉树的遍历(非递归)整理

    二叉树的遍历(非递归) 写在前面 二叉树重要,重要,重要.以下代码每日手撸一遍,深刻理解. 二叉树的先序遍历(非递归) 巧记心法 判断是否为空树 1.右侧入栈(访问,q指向右孩子,不空则入栈) 2.p ...

  9. 二叉树——中序遍历(递归/非递归)

    中序遍历,即遍历顺序为:左节点.根节点.右节点. 二叉树节点: public class Node {public Node left;public Node right;public int val ...

  10. 二叉树的后序非递归遍历(巧妙思想)

    大家都知道二叉树的前序非递归遍历非常好写: //二叉树的结构 public class TreeNode {TreeNode left;TreeNode right;int val;TreeNode( ...

最新文章

  1. jQuery 人脸识别插件,支持图片和视频
  2. python-argparse批量修改后缀名-batch_file_rename.py
  3. Cascade R-CNN升级!目标检测制霸COCO,实例分割超越Mask R-CNN
  4. C语言实现hello world代码
  5. python实现购物车总结_python3简单购物车实现
  6. Spark入门(Python版)
  7. MySQL二十四:索引
  8. JavaScript中 切割截取字符串的几种方法
  9. 手把手系列-从零开始手把手教你前后分离网站
  10. GY-BMP280-3.3 高精度大气压强传感器模块
  11. 一文详解结构光发展简史
  12. ubuntu 开机进不去桌面问题
  13. 淘宝618列车喵币自动做任务app 懒人一键安装包
  14. 抗癌药物之多肽药物偶联物技术(PDC)介绍
  15. Coursera 学习记录:细菌分组(通过冒泡排序实现两组有差异的分类)
  16. 牛客网刷算法题的输入输出(C++)
  17. 旧版微信内置浏览器x5核心无法打开,安装内核提示“内核下载失败115→115”,有相同情况吗
  18. java 使用*打印图形(菱形、平行四边形、三角形)
  19. 豆瓣上《特权和寻租的经济学》的书评
  20. Matlab如何提取论文插图中的渐变色?一招轻松搞定

热门文章

  1. VMware虚拟机经常性卡死
  2. 半睡半醒设计模式之概述
  3. html css实现可下来的自定义表格,变化多端 – 多种纯CSS的HTML表格设计
  4. [Unity] 战斗系统学习 12:Switchable 1
  5. LaTex常用的一些语法【超实用-新手入门】
  6. 在线客服QQ是怎么实现的
  7. 阿里向微信递了一束带刺的玫瑰?
  8. 腾讯严打第三方QQ机器人:多家QQ机器人暂停服务
  9. 机器学习之集成学习(Ensemble Learning)
  10. 【转】学PS基础:Photoshop 技能167个 经典的Photoshop技巧大全,如果你是初级阶段的水平,熟读此文并掌握,马上进阶为中级水平。