求二叉树的深度

Posted Unity随笔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求二叉树的深度相关的知识,希望对你有一定的参考价值。

刷题多了,大家会发现一讲到二叉树相关,基本逃不掉两种基调:

    广度优先搜索

    深度优先搜索

直接上代码

    广度  用队列Queue

public int MaxDepth(TreeNode root){ if (root == null) return 0; Queue<TreeNode> tQueue = new Queue<TreeNode>(); tQueue.Enqueue(root); int result = 0; while(tQueue.Count > 0) { int count = tQueue.Count; for(int i=0; i<count; ++i) { var node = tQueue.Dequeue(); if (node.left != null) tQueue.Enqueue(node.left); if (node.right != null) tQueue.Enqueue(node.right); } ++result; } return result;}

    深度  用Stack栈

public int MaxDepth(TreeNode root){ if (root == null) return 0; int result = 0; int maxDepth = 0; Stack<TreeNode> st = new Stack<TreeNode>(); st.Push(root); while(st.Count > 0) { var node = st.Peek(); if(node != null) { st.Pop(); st.Push(node); st.Push(null); // null用来标记节点node ++maxDepth; if (node.left != null) st.Push(node.left); if (node.right != null) st.Push(node.right); } else { st.Pop(); //移除null st.Pop(); //移除被标记的node --maxDepth; } result = result > maxDepth ? result : maxDepth; } return result;}

关于Queue、Stack可看之前两篇文章的相关介绍


关于递归这个个人不推荐大家使用,能用递归解决的问题,大多是都能转为用Stack处理。

递归--->Stack  这个思想要时常注意转换


递归:1:结束递归的结束条件一旦出错,容易出现栈溢出的问题

2:实际开发中,递归出现问题不容易定位。在不断重复调用本身时,初学者会对查错无所适从

以上是关于求二叉树的深度的主要内容,如果未能解决你的问题,请参考以下文章

求二叉树的最大深度

求二叉树的最大深度

求二叉树的深度

数据结构 二叉树的简单理解和代码实现

数据结构实验之二叉树八:(中序后序)求二叉树的深度

PTA 求二叉树的深度