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("\n");
        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版本

 

posted @ 2020-03-10 15:35  从来不虚场合  阅读(138)  评论(0编辑  收藏  举报