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;
}
}
树--计算树的深度
最新推荐文章于 2025-05-29 10:00:00 发布