文章目录
 一、 二叉树结构体1.1 生成一个二叉树
  二、求最大深度2.1 递归求最大深度2.2 之前我们写过层序遍历,多少层就是最大深度,借助linkedList
 
 
一、 二叉树结构体
 
public class TreeNode {
    private String val
;
    private TreeNode left
;
    private TreeNode right
;
    TreeNode(String x
) {
        val 
= x
;
    }
    public String 
getVal() {
        return val
;
    }
    public TreeNode 
getLeft() {
        return left
;
    }
    public TreeNode 
getRight() {
        return right
;
    }
    public TreeNode(String val
, TreeNode left
, TreeNode right
) {
        this.val 
= val
;
        this.left 
= left
;
        this.right 
= right
;
    }
}
 
1.1 生成一个二叉树
 
    
    public static TreeNode 
oneGetter() {
        TreeNode d 
= new TreeNode("D", new TreeNode("C", null
, null
), new TreeNode("E", null
, null
));
        TreeNode b 
= new TreeNode("B", new TreeNode("A", null
, null
), d
);
        TreeNode i 
= new TreeNode("I", new TreeNode("H", null
, null
), null
);
        TreeNode g 
= new TreeNode("G", null
, i
);
        TreeNode root 
= new TreeNode("F", b
, g
);
        return root
;
    }
 
二、求最大深度
 
2.1 递归求最大深度
 
时间复杂度: 我们每个结点只访问一次,因此时间复杂度为 O(N)O(N), 其中 NN 是结点的数量。
 
空间复杂度: 在最糟糕的情况下,树是完全不平衡的,例如每个结点只剩下左子结点,递归将会被调用 NN 次(树的高度),因此保持调用栈的存储将是 O(N)O(N)。但在最好的情况下(树是完全平衡的),树的高度将是 \log(N)log(N)。因此,在这种情况下的空间复杂度将是 O(\log(N))O(log(N))。
 
    public static int diGuiMaxDeep(TreeNode root
) {
        if (root 
== null
) {
            return 0;
        } else {
            int leftDeep 
= diGuiMaxDeep(root
.getLeft());
            int rightDeep 
= diGuiMaxDeep(root
.getRight());
            return Math
.max(leftDeep
, rightDeep
) + 1;
        }
    }
 
2.2 之前我们写过层序遍历,多少层就是最大深度,借助linkedList
 
    
    public static int cengMaxDeep(TreeNode root
) {
        int maxDeep 
= 0;
        if (root 
== null
) {
            return 0;
        }
        LinkedList
<TreeNode> linkedList 
= new LinkedList<>();
        linkedList
.add(root
);
        TreeNode one
;
        while (linkedList 
.size()>0) {
            maxDeep
++;
            int oneCengLen 
= linkedList
.size();
            while (oneCengLen 
> 0) {
                 one 
= linkedList
.pop();
               if(one
!=null
){
                   if(one
.getLeft()!=null
){
                       linkedList
.add(one
.getLeft());
                   }
                   if(one
.getRight()!=null
){
                       linkedList
.add(one
.getRight());
                   }
               }
                oneCengLen
--;
            }
        }
        return maxDeep
;
    }