zoukankan      html  css  js  c++  java
  • LeetCode--[树]--不定时更新

    1._226_翻转二叉树

    1.1链接

    https://leetcode-cn.com/problems/invert-binary-tree/

    1.2题目描述

    1.3解题思路

    1.4代码实现

    java版本

    四种实现方式

    package 二叉树;
    
    import java.util.LinkedList;
    import java.util.Queue;
    
    /**
     * https://leetcode-cn.com/problems/invert-binary-tree/
     * @author MJ Lee
     *
     */
    public class _226_翻转二叉树 {
        //前序遍历方法
    //   public TreeNode invertTree(TreeNode root) {
    //       if (root == null) return root;
    //       
    //       TreeNode tmp = root.left;
    //       root.left = root.right;
    //       root.right = tmp;
    //       
    //       invertTree(root.left);
    //       invertTree(root.right);
    //       
    //       return root;
    //   }
        //后序遍历方法
    //    public TreeNode invertTree(TreeNode root) {
    //       if (root == null) return root;
    //       
    //       invertTree(root.left);
    //       invertTree(root.right);
    //       
    //       TreeNode tmp = root.left;
    //       root.left = root.right;
    //       root.right = tmp;
    //       
    //       return root;
    //    }
        //中序遍历方法
    //    public TreeNode invertTree(TreeNode root) {
    //       if (root == null) return root;
    //       
    //       invertTree(root.left);
    //
    //       TreeNode tmp = root.left;
    //       root.left = root.right;
    //       root.right = tmp;
    //
    //       invertTree(root.left);
    //       
    //       return root;
    //    }
        //层序遍历方法
        public TreeNode invertTree(TreeNode root) {
            if (root == null) return root;
            
            Queue<TreeNode> queue = new LinkedList<>();
            queue.offer(root);
            
            while (!queue.isEmpty()) {
                TreeNode node = queue.poll();
                TreeNode tmp = node.left;
                node.left = node.right;
                node.right = tmp;
                
                if (node.left != null) {
                    queue.offer(node.left);
                }
                
                if (node.right != null) {
                    queue.offer(node.right);
                }
            }
            return root;
        }
    }
    View Code

    2.计算二叉树的高度

    2.1解题思路

    递归方法

    迭代方式--通过层序遍历来解决

    2.2代码实现

    java版本

    递归方式

    public int height2() {
            return height(root);
        }
    //递归方式
    private int height(Node<E> node) {
            if (node == null) return 0;
            return 1 + Math.max(height(node.left), height(node.right));
        }
    View Code

    非递归方式--迭代

    //
    /非递归方式 --public int height() {
            if (root == null) return 0;
            
            // 树的高度
            int height = 0;
            // 存储着每一层的元素数量
            int levelSize = 1;
            Queue<Node<E>> queue = new LinkedList<>();
            queue.offer(root);
            
            while (!queue.isEmpty()) {
                Node<E> node = queue.poll();
                levelSize--;
                
                if (node.left != null) {
                    queue.offer(node.left);
                }
                
                if (node.right != null) {
                    queue.offer(node.right);
                }
    
                if (levelSize == 0) { // 意味着即将要访问下一层
                    levelSize = queue.size();
                    height++;
                }
            }
            
            return height;
        }
    View Code

    3.利用前序遍历打印树状结构

    3.1题目描述

    3.2代码实现

    java版本

    @Override
        public String toString() {
            StringBuilder sb = new StringBuilder();
            toString(root, sb, "");
            return sb.toString();
        }
        
        private void toString(Node<E> node, StringBuilder sb, String prefix) {
            if (node == null) return;
    
            toString(node.left, sb, prefix + "L---");
            sb.append(prefix).append(node.element).append("
    ");
            toString(node.right, sb, prefix + "R---");
        }
    View Code

    4.判断一棵树是否是完全二叉树

    4.1解题思路

    4.2代码实现

    java版本

    public boolean isComplete() {
            if (root == null) return false;
            
            Queue<Node<E>> queue = new LinkedList<>();
            queue.offer(root);
    
            boolean leaf = false;
            while (!queue.isEmpty()) {
                Node<E> node = queue.poll();
                if (leaf && !node.isLeaf()) return false;
                
                if (node.left != null) {
                    queue.offer(node.left);
                } else if (node.right != null) { // node.left == null && node.right != null
                    return false;
                }
                
                if (node.right != null) {
                    queue.offer(node.right);
                } else { // node.right == null
                    leaf = true;
                }
            }
            
            return true;
        }
    View Code

    X._XXX_用栈实现队列

    X.1链接

    X.2题目描述

    X.3解题思路

    X.4代码实现

    java版本

    X._XXX_用栈实现队列

    X.1链接

    X.2题目描述

    X.3解题思路

    X.4代码实现

    java版本

    X._XXX_用栈实现队列

    X.1链接

    X.2题目描述

    X.3解题思路

    X.4代码实现

    java版本

    X._XXX_用栈实现队列

    X.1链接

    X.2题目描述

    X.3解题思路

    X.4代码实现

    java版本

    X._XXX_用栈实现队列

    X.1链接

    X.2题目描述

    X.3解题思路

    X.4代码实现

    java版本

    X._XXX_用栈实现队列

    X.1链接

    X.2题目描述

    X.3解题思路

    X.4代码实现

    java版本

    X._XXX_用栈实现队列

    X.1链接

    X.2题目描述

    X.3解题思路

    X.4代码实现

    java版本

    X._XXX_用栈实现队列

    X.1链接

    X.2题目描述

    X.3解题思路

    X.4代码实现

    java版本

  • 相关阅读:
    Object有哪些公用方法?(转)
    equals和==的区别(转)
    switch语句中case的标签
    (常见面试问题)九种基本数据类型的大小,以及他们的封装类
    English
    plot
    文件读写
    标准化
    独热编码
    一阶逻辑
  • 原文地址:https://www.cnblogs.com/ggnbnb/p/12456034.html
Copyright © 2011-2022 走看看