在二叉树中,最为常见就是求解一棵树的深度,也就是说树中从根节点到叶节点的路径中,最长的一条,最为常见的方式分为递归求解和非递归求解,具体代码如下。
树形结构
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
递归求解
public int maxDepth(TreeNode root){
if(root == null)
return 0;
return Math.max(maxDepth(root.right), maxDepth(root.left))+1;
}
非递归求解
public int maxDepth(TreeNode root){
if(root == null)
return 0;
Deque<TreeNode> stackTree = new LinkedList<>();
Deque<Integer> stackNum = new LinkedList<>();
int maxDepth = 0;
stackTree.push(root);
stackNum.push(1);
while(!stackTree.isEmpty()){
TreeNode curNode = stackTree.pop();
int curDepth = stackNum.pop();
maxDepth = Math.max(maxDepth, curDepth);
if(curNode.left != null){
stackTree.push(curNode.left);
stackNum.push(curDepth+1);
}
if(curNode.right != null){
stackTree.push(curNode.right);
stackNum.push(curDepth+1);
}
}
return maxDepth;
}