226_翻转二叉树

简介: 226_翻转二叉树

226_翻转二叉树


package 二叉树.BT;
import java.util.LinkedList;
import java.util.Queue;
/**
 * https://leetcode-cn.com/problems/invert-binary-tree/
 * 题意,将所有结点进行左右结点数据进行交换(这里咱只需拿到所有结点即可~前序、中序、后序(递归)、层序(迭代)都可以拿到所有结点)
 * 
 * @author Huangyujun
 *
 */
public class _226_翻转二叉树 {
    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;
        }
    }
    //前序遍历
    public TreeNode invertTree1(TreeNode root) {
        if(root == null)    return root;
        //前序遍历,首先拿到自己root[题意,交换当前结点的左右结点数据]
        TreeNode tmp = new TreeNode();
        tmp = root.left;
        root.left = root.right;
        root.right = tmp;
        invertTree(root.left);
        invertTree(root.right);
        return root;
    }
    // 中序遍历
    public TreeNode invertTree2(TreeNode root) {
        if (root == null)
            return root;
        invertTree(root.left);
        // 前序遍历,首先拿到自己root[题意,交换当前结点的左右结点数据]
        TreeNode tmp = new TreeNode();
        tmp = root.left;
        root.left = root.right;
        root.right = tmp;
        //这样写就出错了,没有很好理解递归的含义:再次 调用函数是为了递归进行找子结点(子树)
        //上面先 invertTree(root.left); 递归进左子树,然后进行交换,
        //(右子树的位置交换到左边了),若是还写invertTree(root.right); 又是一次递归进去左子树(重复了,而且还不给右子树机会)
//        invertTree(root.right);
        //修改:
        invertTree(root.left);
        return root;
    }
    // 层序遍历
    public TreeNode invertTree(TreeNode root) {
        if (root == null)    return null;
        Queue queue = new LinkedList();
        queue.offer(root);
        // 只要队列不为空:就不断的出队,然后入队左右子节点
        while (!queue.isEmpty()) {
            TreeNode node =  (TreeNode) queue.poll();
            //拿到当前结点(进行交换左右结点)
            TreeNode tmp = new 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;
    }
}
目录
相关文章
|
5月前
力扣226:翻转二叉树
力扣226:翻转二叉树
32 0
|
5月前
|
Java C++ Python
leetcode-226:翻转二叉树
leetcode-226:翻转二叉树
21 0
|
11月前
Leetcode226.翻转二叉树
Leetcode226.翻转二叉树
33 0
|
12月前
leetcode(翻转二叉树)
leetcode(翻转二叉树)
36 0
|
5月前
[LeetCode]—— 226——翻转二叉树
[LeetCode]—— 226——翻转二叉树
LeetCode | 226. 翻转二叉树
LeetCode | 226. 翻转二叉树
|
5月前
|
C++
翻转二叉树(C++)
翻转二叉树(C++)
29 0
|
5月前
|
算法 程序员
【算法训练-二叉树 四】【对称与翻转】对称二叉树、翻转二叉树
【算法训练-二叉树 四】【对称与翻转】对称二叉树、翻转二叉树
44 0