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 @   yky_xukai的胡思乱想  阅读(46)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示