以前,我介绍了有关java二叉树中所有距离为k的节点的内容,接下来要传达的是非递归实现java二叉树深度的内容。 一起看看吧。
非递归实现
使用层次遍历算法设置变量level以记录当前节点所在的层次数,将变量last设置为指向当前层次中的最后一个节点,并在处理完当前层次中的最后一个节点后,使level指向一个操作。
如果设置变量cur,则会记录当前层已访问的节点数,并在cur等于last时终止对该层的访问。
阶层遍历求出树的宽度,输出某阶层的节点、某阶层的节点的数量,各阶层的节点的数量也可以使用同样的算法。
树宽:
在树的深度算法之上,添加访问的层节点数量最多的变量max。
在访问每个层之前将max与last进行比较,如果max较大,则max不会改变。 如果max小于last,则将last指定给max。
代码实现: importjava.util.LinkedList;
公共类深度
{
//非递归实现
公共自由深度2 (bi tree root ) )。
{
if (root==空) )。
返回0;
BiTreecurrent=null;
链接列表queue=new linked list (;
queue.offer(root );
intcur,last;
输入级别=0;
while (! queue.isEmpty () )
{
cur=0; //记录遍历此层的节点数
last=queue.size (; (遍历当前层次后,队列内的要素都是下一个层次的要素,队列的长度是该层次的节点数
while(cur
{
current=queue.poll (; //出队组成一个要素
cur;
//将当前节点的左右节点入队((如果存在) ) ) )。
if(current.left!=null )
{
queue.offer(current.left );
}
if(current.right!=null )
{
queue.offer(current.right );
}
}
标签; //每遍历一级1
}
返回级别;
}
publicstaticvoidmain (string [ ] args ) )。
{
BiTreeroot=BiTree.buildTree (;
Deepdeep=newDeep (;
system.out.println (deep.find deep ) root );
system.out.println (deep.find deep1) root );
system.out.println (deep.find deep2) root );
}
}
java二叉树深度的非递归内容介绍到这里了,你都知道吗? 更多
请阅读: