代码随想三刷二叉树篇1

144. 二叉树的前序遍历

题目

链接

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList();
        pre(root,list);
        return list;
    }

    public void pre(TreeNode root,List<Integer> list){
        if(root==null){
            return;
        }
        list.add(root.val);
        pre(root.left,list);
        pre(root.right,list);

    }
}

145. 二叉树的后序遍历

题目

链接

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        
        List<Integer> list = new ArrayList();
        pos(root,list);
        return list;
    }

    public void pos(TreeNode root,List<Integer> list){
        if(root==null){
            return;
        }
        pos(root.left,list);
        pos(root.right,list);
        list.add(root.val);
    }
}

94. 二叉树的中序遍历

题目

链接

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList();
        pos(root,result);
        return result;
    }
    public void pos(TreeNode root,List<Integer> list){
        if(root==null){
            return;
        }
        pos(root.left,list);
        list.add(root.val);
        pos(root.right,list);
    }
}

102. 二叉树的层序遍历

题目

链接

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        Deque<TreeNode> queue = new LinkedList();
        List<List<Integer>> result = new ArrayList();
        if(root==null){
            return result;
        }
        queue.addLast(root);
        while(!queue.isEmpty()){
            int size = queue.size();
            List<Integer> list = new ArrayList();
            for(int i = 0;i<size;i++){
                TreeNode temp = queue.removeFirst();
                list.add(temp.val);
                if(temp.left!=null){
                    queue.addLast(temp.left);
                }
                if(temp.right!=null){
                    queue.addLast(temp.right);
                }
            }
            result.add(list);
        }
        return result;
    }
}

107. 二叉树的层序遍历 II

题目

链接

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    
    public List<List<Integer>> levelOrderBottom(TreeNode root) {
        List<List<Integer>> result = new ArrayList();
        Deque<TreeNode> queue = new LinkedList();
        if(root==null){
            return result;
        }
        queue.addLast(root);
        while(!queue.isEmpty()){
            int size = queue.size();
            List<Integer> list = new ArrayList();
            for(int i=0;i<size;i++){
                TreeNode t = queue.removeFirst();
                list.add(t.val);
                if(t.left!=null){
                    queue.addLast(t.left);
                }
                if(t.right!=null){
                    queue.addLast(t.right);
                }
            }
            result.add(0,list);
        }
        
        return result;
    }
}

199. 二叉树的右视图

题目

链接

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> rightSideView(TreeNode root) {
        List<Integer> result = new ArrayList();
        if(root==null){
            return result;
        }
        Deque<TreeNode> queue = new LinkedList();
        queue.addLast(root);
        while(!queue.isEmpty()){
            int size = queue.size();
            for(int i=0;i<size;i++){
                TreeNode t = queue.removeFirst();
                if(t.left!=null){
                    queue.addLast(t.left);
                }
                if(t.right!=null){
                    queue.addLast(t.right);
                }
                if(i==size-1){
                    result.add(t.val);
                }
            }
        }

        return result;
    }
}

637. 二叉树的层平均值

题目

链接

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Double> averageOfLevels(TreeNode root) {
        List<Double> result = new ArrayList();
        if(root==null){
            return result;
        }
        Deque<TreeNode> queue = new LinkedList();
        queue.addLast(root);
        while(!queue.isEmpty()){
            int size = queue.size();
            double sum = 0;
            for(int i=0;i<size;i++){
                TreeNode t = queue.removeFirst();
                sum += t.val;
                if(t.left!=null){
                    queue.addLast(t.left);
                }
                if(t.right!=null){
                    queue.addLast(t.right);
                }
            }
            result.add(sum/size);
        }

        return result;
    }
}

515. 在每个树行中找最大值

题目

链接

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> largestValues(TreeNode root) {
        List<Integer> result = new ArrayList();
        if(root==null){
            return result;
        }
        Deque<TreeNode> queue = new LinkedList();
        queue.addLast(root);
        while(!queue.isEmpty()){
            int size = queue.size();
            int num = Integer.MIN_VALUE;
            for(int i=0;i<size;i++){
                TreeNode t = queue.removeFirst();
                num = Math.max(num,t.val);
                if(t.left!=null){
                    queue.addLast(t.left);
                }
                if(t.right!=null){
                    queue.addLast(t.right);
                }
            }
            result.add(num);
        }

        return result;
    }
}

104. 二叉树的最大深度

题目

链接

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {

    public int maxDepth(TreeNode root) {
        findDepth(root,1);
        return maxDepth;
    }
    int maxDepth = 0;
    public void findDepth(TreeNode root,int depth){
        if(root==null){
            return;
        }
        maxDepth = Math.max(maxDepth,depth);
        findDepth(root.left,depth+1);
        findDepth(root.right,depth+1);
    }
}

111. 二叉树的最小深度

题目

链接

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int minDepth(TreeNode root) {
        if(root==null){
            return 0;
        }
        pre(root,1);
        return min;
    }   
    int min = Integer.MAX_VALUE;
    public void pre(TreeNode root,int depth){
        if(root==null){
            return;
        }
        if(root.left==null&&root.right==null){
            min = Math.min(min,depth);
        }
        pre(root.left,depth+1);
        pre(root.right,depth+1);
    }
}

226. 翻转二叉树

题目

链接

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root==null||(root.left==null&&root.right==null)){
            return root;
        }
        TreeNode left= invertTree(root.left);
        TreeNode right= invertTree(root.right);
        root.left = right;
        root.right = left;
        return root;
    }
}

相关推荐

  1. 代码随想1

    2024-06-17 06:30:02       25 阅读
  2. 代码随想2

    2024-06-17 06:30:02       37 阅读
  3. 代码随想——day15

    2024-06-17 06:30:02       43 阅读
  4. 代码随想——day18

    2024-06-17 06:30:02       60 阅读
  5. 代码随想——day22

    2024-06-17 06:30:02       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-17 06:30:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-17 06:30:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-17 06:30:02       87 阅读
  4. Python语言-面向对象

    2024-06-17 06:30:02       96 阅读

热门阅读

  1. 数据结构学习笔记-图

    2024-06-17 06:30:02       34 阅读
  2. TF-IDF算法详细解析与应用

    2024-06-17 06:30:02       30 阅读
  3. 【完整解决方案】生产实战,数据库发生了死锁

    2024-06-17 06:30:02       29 阅读
  4. 阿里云主机使用 docker-compose 部署 harbor 镜像仓库

    2024-06-17 06:30:02       26 阅读
  5. C++二进制文件的读与写

    2024-06-17 06:30:02       30 阅读
  6. 周记-20240616

    2024-06-17 06:30:02       30 阅读
  7. Spring框架的原理及应用详解(六)

    2024-06-17 06:30:02       22 阅读
  8. Springboot&&Spring

    2024-06-17 06:30:02       25 阅读
  9. MySQL学习——在用Connector/NET处理BLOB数据

    2024-06-17 06:30:02       24 阅读
  10. 【前端面试】动态表单篇

    2024-06-17 06:30:02       28 阅读
  11. Elasticsearch-通过分析器进行分词

    2024-06-17 06:30:02       31 阅读
  12. Web前端个人博客设计:创意与技术的融合之旅

    2024-06-17 06:30:02       26 阅读