一刷剑指Offer_55:二叉树的深度

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;
    }
}
发布了716 篇原创文章 · 获赞 130 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/qq_42764468/article/details/105339869
今日推荐