1、题目描述:
2、递归思路:
返回左右子节点的高度的最大值+1(1是当前节点)
3、测试代码实现:
public class Node {
int value;
Node left;
Node right;
Node(int value){
this.value = value;
}
}
class Solution {
private Node root;
public void setRoot(Node root){
this.root = root;
}
public int maxDepth(Node root) {
if(root==null) return 0;
int leftHeight = maxDepth(root.left);
int rightHeight = maxDepth(root.right);
int i = Math.max(leftHeight, rightHeight) + 1;
return i;
}
}
public class Main {
public static void main(String[] args) {
Node node = new Node(3);
Node node1 = new Node(9);
Node node2 = new Node(20);
Node node3 = new Node(15);
Node node4 = new Node(7);
Solution binaryTree = new Solution();
binaryTree.setRoot(node);
node.left = node1;
node.right = node2;
node2.left = node3;
node2.right = node4;
System.out.println(binaryTree.maxDepth(node));
}
}
4、迭代思路:
使用层序遍历,二叉树的高度其实就是二叉树的层数
class Solution2 {
private Node root;
public void setRoot(Node root){
this.root = root;
}
public int maxDepth(Node root) {
if(root==null) return 0;
Queue<Node> queue = new LinkedList<>();
queue.add(root);
int depth=0;
//每一层的节点数
int levelSize=1;
while (!queue.isEmpty()){
Node node = queue.poll();
if(node.left!=null){
queue.add(node.left);
}
if(node.right!=null){
queue.add(node.right);
}
//即将访问下一层
if(levelSize==0){
levelSize = queue.size();
depth++;
}
}
return depth;
}
}
5、剑指Offer作答:
递归思路:
class Solution {
public int maxDepth(TreeNode root) {
if(root==null) return 0;
return Math.max(maxDepth(root.left),maxDepth(root.right))+1;
}
}
迭代思路:
class Solution {
public int maxDepth(TreeNode root) {
if(root==null) return 0;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
//树的深度
int depth = 0;
//每一层的节点数,刚开始为1
int leverSize = 1;
while(!queue.isEmpty()){
TreeNode node = queue.poll();
leverSize--;
if(node.left!=null){
queue.add(node.left);
}
if(node.right!=null){
queue.add(node.right);
}
//即将访问下一层
if(leverSize==0){
leverSize = queue.size();
depth++;
}
}
return depth;
}
}