其他分享
首页 > 其他分享> > Leetcode226/101/104/111之二叉树中的递归例题

Leetcode226/101/104/111之二叉树中的递归例题

作者:互联网

二叉树中的递归例题

Leetcode226-翻转二叉树

//递归先序遍历的变形
public class L226 {
    public TreeNode invertTree(TreeNode root) {
        if(root==null){
            return null;
        }
        swap(root);
        invertTree(root.left);
        invertTree(root.right);

        return root;

    }

    public void swap(TreeNode root){
        TreeNode temp=root.left;
        root.left=root.right;
        root.right=temp;
    }
}

Leetcode101-对称二叉树

//递归后序遍历变形
//本题遍历只能是“后序遍历”,因为我们要通过递归函数的返回值来判断两个子树的内侧节点和外侧节点是否相等
public class L101 {
    public boolean isSymmetric(TreeNode root) {
        if(root==null){
            return true;
        }else{
            return isDuiChen(root.left,root.right);
        }
    }

    public boolean isDuiChen(TreeNode leftNode,TreeNode rightNode){
        if(leftNode==null && rightNode==null){
            return true;
        }
        if(leftNode==null || rightNode== null){
            return false;
        }
        if(leftNode.val!=rightNode.val){
            return false;
        }
        boolean outDuiChen=isDuiChen(leftNode.left,rightNode.right);
        boolean inDuiChen=isDuiChen(leftNode.right,rightNode.left);
        return outDuiChen&&inDuiChen;
    }
}

Leetcode104-二叉树的最大深度

public class L104 {
    //递归法后序遍历
    public int maxDepth1(TreeNode root) {
        return getDepth(root);
    }

    public int getDepth(TreeNode root){
        if(root==null){
            return 0;
        }
        int leftDepth=getDepth(root.left);
        int rightDepth=getDepth(root.right);
        int finalDepth=Math.max(leftDepth,rightDepth)+1;
        return finalDepth;
    }

    //递归法前序遍历
    int finalRes=1;
    public int maxDepth2(TreeNode root) {
        if(root==null){
            return 0;
        }
        getDepth2(root,1);
        return finalRes;
    }

    public void getDepth2(TreeNode root,int depth){
        if(finalRes<depth){
            finalRes=depth;
        }
        if(root.left==null && root.right==null){
            return;
        }
        if(root.left!=null){
            depth++;
            getDepth2(root.left,depth);
            depth--;
        }
        if(root.right!=null){
            depth++;
            getDepth2(root.right,depth);
            depth--;
        }
    }


    //迭代法
    public int maxDepth3(TreeNode root) {
        if (root==null)
            return 0;
        else {
            return order(root);
        }
    }


    public int order(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(root);
        int max=0;
        while (!queue.isEmpty()) {
            max++;
            int currentLevelSize = queue.size();
            for (int i = 0; i < currentLevelSize; i++) {
                TreeNode node = queue.poll();
                if (node.left != null) {
                    queue.offer(node.left);
                }
                if (node.right != null) {
                    queue.offer(node.right);
                }
            }
        }
        return max;
    }
}

Leetcode111-二叉树的最小深度

//递归的变形
public class L111 {
    public int minDepth(TreeNode root) {
        if(root==null){
            return 0;
        }
        int leftDepth=minDepth(root.left);
        int rightDepth=minDepth(root.right);
        //如果左子树为空,右子树不为空,说明最小深度是 1 + 右子树的深度
        if (root.left == null) {
            return rightDepth + 1;
        }
        //同上
        if (root.right == null) {
            return leftDepth + 1;
        }
        return Math.min(leftDepth,rightDepth)+1;
    }
}

标签:Leetcode226,null,return,int,二叉树,例题,root,public
来源: https://www.cnblogs.com/fao99/p/16121575.html