226. 翻转二叉树

翻转一棵二叉树。

示例:

输入:

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

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

解法一:前序遍历递归

 public TreeNode invertTree(TreeNode root) {
        invert(root);
        return root;
    }
    void invert(TreeNode root) {
        if(root == null)
            return ;
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;
        invert(root.left);
        invert(root.right);
    }

解法二:层次遍历迭代法    给我的启发就是我们   对于树的操作要实现是向下操作,其实每个节点有关的仅仅是向下的那两个节点

 public TreeNode invertTree(TreeNode root) {
        if(root==null)
            return root;
        TreeNode newroot;
        newroot = root;
        LinkedList<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while(!queue.isEmpty()) {
            TreeNode temp = queue.poll();
            if(temp.right!=null) {
                queue.push(temp.right);
            }
            if(temp.left!=null) {
                queue.push(temp.left);
            }
            TreeNode te = temp.left;
            temp.left = temp.right;
            temp.right = te;
            
            
        }
        return root;
    }

 解法三:前序遍历迭代法    因为本题像一个前序遍历 ,所以可以写成迭代版的前序遍历,通过递归向迭代的转变,可以用迭代来实现本题

*****************************************

posted @ 2021-06-09 17:58  zhustarstar  阅读(45)  评论(0编辑  收藏  举报