求二叉树的深度
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:实际开发中,递归出现问题不容易定位。在不断重复调用本身时,初学者会对查错无所适从
以上是关于求二叉树的深度的主要内容,如果未能解决你的问题,请参考以下文章