public class BinaryTree { /** 递归方法 **/ static int findDeep(TreeNode root) { if (root == null) { return 0; } int left = findDeep(root.left); int right = findDeep(root.right); // System.out.println("left=" + left + ", right=" + right); return left > right ? left + 1 : right + 1;
}
/** 非递归方法 **/ static int findDeep2(TreeNode root) { if (root == null) { return 0; } TreeNode current = null;
LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(root);
int level = 0; int cur, last;
while (!queue.isEmpty()) { cur = 0;// 记录当前层节点个数 last = queue.size();// 当前层节点的个数
while (cur < last) { current = queue.poll(); // 把第一个元素提出来 cur++;
// 把当前的左右节点入队 if (current.left != null) { queue.offer(current.left); } if (current.right != null) { queue.offer(current.right); } } level++;// 每遍历一层,level+1 }
return level; }
public static void main(String[] args) { TreeNode root = new TreeNode(1); TreeNode left = new TreeNode(2); TreeNode right = new TreeNode(3); TreeNode right2 = new TreeNode(4); // 创建树 root.left = left; root.right = right; right.left = right2;
System.out.println("deep is " + findDeep(root)); System.out.println("deep2 is " + findDeep2(root)); }
}
class TreeNode { int val; TreeNode left; TreeNode right;