156.上下翻转二叉树

给你一个二叉树的根节点 root ,请你将此二叉树上下翻转,并返回新的根节点。

你可以按下面的步骤翻转一棵二叉树:

    1. 原来的左子节点变成新的根节点
    2. 原来的根节点变成新的右子节点
    3. 原来的右子节点变成新的左子节点

 

 

 

 

 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode() {}
 8  *     TreeNode(int val) { this.val = val; }
 9  *     TreeNode(int val, TreeNode left, TreeNode right) {
10  *         this.val = val;
11  *         this.left = left;
12  *         this.right = right;
13  *     }
14  * }
15  */
16 class Solution {
17     TreeNode parent = null;
18     TreeNode right = null;
19     public TreeNode upsideDownBinaryTree(TreeNode root) {
20         if(root==null){
21             return root;
22         }
23         TreeNode next = root.left;
24         TreeNode newRoot = reverse(root,next);
25         return newRoot;
26     }
27 
28     public TreeNode reverse(TreeNode curr,TreeNode next){
29         // 递归出口:左下角        
30         if(next == null){
31             curr.right = parent;
32             curr.left = right;
33             return curr;
34         }
35         // 记录未来的 父节点和右侧兄弟
36         TreeNode nextParent = curr;
37         TreeNode nextRight = curr.right;
38         next = curr.left;
39         // 修改当前节点,进行翻转
40         curr.left = right;
41         curr.right = parent;
42         parent = nextParent;
43         right = nextRight;
44         curr = next;
45         next = curr.left;
46         // 向下递归
47         return reverse(curr,next);
48     }
49 }

 

posted @ 2022-06-27 11:05  yky_xukai的胡思乱想  阅读(53)  评论(0)    收藏  举报