数据结构与算法-求给定二叉树的最大深度
题目描述:
求给定二叉树的最大深度,最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量。
解题思路:
1. 递归法;
2. 迭代算法:借助队列。
实现代码:
import java.util.LinkedList;public class BinaryTreeMaxDdepth {/**** @param root TreeNode类* @return int整型*/public static int maxDepth (TreeNode root) {return maxDepthByIterator(root);}/*** 迭代算法* @param root TreeNode类* @return int整型*/public static int maxDepthByIterator (TreeNode root) {// write code hereif(root==null){return 0;}if(root.left==null&& root.right==null){return 1;}LinkedList<TreeNode> list = new LinkedList<TreeNode>();list.push(root);int maxDepth = 0;while(!list.isEmpty()){int levelSize = list.size();while (levelSize>0){TreeNode cur = list.pollLast();--levelSize;if (cur.left!=null){list.push(cur.left);}if (cur.right!=null){list.push(cur.right);}}maxDepth++;}return maxDepth;}/*** 递归算法* @param root TreeNode类* @return int整型*/public static int maxDepthByRecruit (TreeNode root) {// write code hereif(root==null){return 0;}if(root.left==null&& root.right==null){return 1;}int leftMaxDepth = maxDepthByRecruit(root.left)+1;int rightMaxDepth = maxDepthByRecruit(root.right)+1;return Math.max(leftMaxDepth,rightMaxDepth);}public static void main(String[] args){//{1,2,3,4,#,#,5}TreeNode root = new TreeNode(1,new TreeNode(2,new TreeNode(4,null,null),null),new TreeNode(3,null,new TreeNode(5,null,null)));int max = maxDepth(root);System.out.println(max);}}class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val,TreeNode left,TreeNode right){this.val = val;this.left = left;this.right = right;}}
