树--计算树的深度

来源:互联网 发布:java过滤器的工作原理 编辑:程序博客网 时间:2024/06/07 18:14
package com.Tree;import java.util.Stack;/* * 计算二叉树深度方法(递归 和 非递归) */public class Depth {//recursive depth()public int recDepth(BTNode p) {int ldepth, rdepth;if (p == null)return 0;else {ldepth = recDepth(p.left);rdepth = recDepth(p.right);return Math.max(ldepth, rdepth) + 1;}}//non-recursive depth();//中序非递归public int nonRecDepth(BTNode p) {Stack<BTNode> stack1 = new Stack<BTNode>();Stack<Integer> stack2 = new Stack<Integer>();int curdep, maxdep = 0;curdep = 1;while (p != null || stack1.empty() == false) {while (p != null) {stack1.push(p);stack2.push(curdep);p = p.left;curdep++;}p = stack1.pop();curdep = stack2.pop();if (p.left == null && p.right == null)maxdep = Math.max(curdep, maxdep);p = p.right;curdep++;}return maxdep;}//前序非递归public int prenonRecDepth(BTNode p) {Stack<BTNode> stack1 = new Stack<BTNode>();Stack<Integer> stack2 = new Stack<Integer>();int curdep, maxdep = 0;curdep = 1;while (p != null || stack1.empty() == false) {while (p != null) {if (p.left == null && p.right == null)maxdep = Math.max(curdep, maxdep);stack1.push(p);stack2.push(curdep);p = p.left;curdep++;}p = stack1.pop();curdep = stack2.pop();p = p.right;curdep++;}return maxdep;}}

0 0