首页 > 编程知识 正文

二叉树递归求深度如何理解,c语言求二叉树的深度

时间:2023-05-05 20:37:35 阅读:160296 作者:3493

构想二叉树深度递归怎么去想问题?

为什么递归可以用于求二叉树的深度呢? 这是因为,求出一个二叉树的深度,就会求出根节点所在二叉树的深度,也就是左右部分树的最大深度,再求出各个节点左右部分树的最大深度,从而将大问题切分成小问题。 而且,最小的问题有出口,节点为空时的深度为0

二叉树的深度如果不用递归该怎么办?

最直接的想法是使用堆栈。 递归本来是堆栈的方式。 这时,我们又联想到了先序、中序。 后续扫描时也使用堆栈进行了扫描。 那么,我们也应用优先顺序扫描求出堆栈的深度就可以了吧。 如果再仔细想想,就会发现,无论是从早到晚,找不到左节点时都切换到右节点,切换到右节点时根节点被释放,记录的深度不是真的深度,而是小于真的深度。 那么,按先后顺序遍历一下吧? 后手的情况下找不到左节点,所以要寻找右节点且根不出栈,再将右节点按后手顺序遍历,使其在右不在时,也就是左右不在时根节点出现,才能保证真正的深度。 可以设置变量,以记录堆栈可以达到的最大深度为二叉树的深度

Java实现//节点class Node { int data; 节点left=null; node right=空; //二叉树公共类二进制树{//根节点private Node root; //输入的数组private int[] arr_in; //要输出的数组private int[] arr_out; //记录数组下标专用静态索引; //publicbinarytree (初始化int [ ] arr ) { root=new Node; this.arr_in=arr; arr_out=new int[arr.length]; 索引=0; //二叉树深度(递归) publicintgetdepthrecursion ) noder ) if(r!=null } { intm=getdepthrecursion (r.left ); intn=getdepthrecursion(r.right ); 返回(m=n )? (m 1 ) 3360 ) n1 ); } else return 0; //二叉树深度(非递归) publicintgetdepth ) noder ) { Stack stack=new Stack ); Node node=r; 节点顶部; int depth=0 int maxDepth=0; wile(node|! stack.empty () (if ) ) node!=null}{stack.push(node ); 深度; 最大深度(if )最大深度=深度; node=node.left; }else{if(stack.peek ).right stack.peek ).right!=top ) node=stack.peek ().right ); else { top=stack.pop (; 深度- -; node=空; } } } return maxDepth; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。