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版本

  • 相关阅读:
    mvc4 to mvc5 orEF5 to EF6 ,(升级EF6)
    mongodb 增删改查
    切换frame
    selenium使用,xpath解析模块,笔记整理在最后# 四套解析数据的方式 # 1.bs4 2.css_selector 3.xpath 4.re,
    爬虫,request,response 属性,方法,2.beautifulsoup解析模块
    爬虫基础知识简单案例
    vue跳转,v-model 双向绑定,-vuex的使用cookie:,视频第三方播放
    分页器,解析器,url控制器,响应器
    正向代理与反向代理
    认证权限频率自定义
  • 原文地址:https://www.cnblogs.com/ggnbnb/p/12456034.html
Copyright © 2011-2022 走看看