美文网首页
*【二叉树】226.翻转二叉树

*【二叉树】226.翻转二叉树

作者: ___Qian___ | 来源:发表于2019-01-22 14:39 被阅读0次

题目

翻转一棵二叉树。

示例:

输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9
输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

思路

  1. 递归
    先把左右子树各自都翻转了,再将左右子树互换位置。
  2. 迭代
    层序遍历思路。
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    //(1)递归
    public TreeNode invertTree(TreeNode root) {
        
        if(root == null)
            return null;

        //递归翻转root左子树
        TreeNode leftNode = invertTree(root.left);
        //递归翻转root右子树
        TreeNode rightNode = invertTree(root.right);
        //交换root的左右子树
        root.left = rightNode;
        root.right = leftNode;
        return root;
                
    }

    //(2)迭代,层序遍历的思路
    public TreeNode invertTree1(TreeNode root) {
        if (root == null) return null;
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        //根节点入队
        queue.add(root);
        
        while (!queue.isEmpty()) {
            //从队列取节点
            TreeNode current = queue.poll();
            //交换当前节点的左右子树
            TreeNode temp = current.left;
            current.left = current.right;
            current.right = temp;
            //左右子树的根节点入队,等待翻转
            if (current.left != null) queue.add(current.left);
            if (current.right != null) queue.add(current.right);
        }

        return root;
    }
}

相关文章

网友评论

      本文标题:*【二叉树】226.翻转二叉树

      本文链接:https://www.haomeiwen.com/subject/yriljqtx.html