码迷,mamicode.com
首页 > Windows程序 > 详细

LeetCode 226. 翻转二叉树(C#实现)——二叉树,递归,迭代

时间:2020-01-06 13:05:41      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:白板   左右   sum   param   logs   面试   get   stack   二叉树   

一、问题

https://leetcode-cn.com/problems/invert-binary-tree/

翻转一棵二叉树。

示例:

输入:

     4
   /     2     7
 / \   / 1   3 6   9

输出:

     4
   /     7     2
 / \   / 9   6 3   1

备注:
这个问题是受到 Max Howell 的 原问题 启发的 :

    谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。

二、GitHub实现:https://github.com/JonathanZxxxx/LeetCode/blob/master/InvertTreeClass.cs

  Blog:https://www.cnblogs.com/zxxxx/

三、思路

  1、递归:互换左右孩子,对左右孩子进行递归

  2、迭代:根节点入栈,每次迭代中,移除栈顶元素并互换左右孩子,如果当前节点有左孩子,入栈,为空不做处理,右孩子同理

四、代码实现

 1     public class InvertTreeClass
 2     {
 3         /// <summary>
 4         /// 递归
 5         /// </summary>
 6         /// <param name="root"></param>
 7         /// <returns></returns>
 8         public TreeNode InvertTree(TreeNode root)
 9         {
10             if (root == null)
11             {
12                 return null;
13             }
14             var left = InvertTree(root.right);
15             var right = InvertTree(root.left);
16             root.left = left;
17             root.right = right;
18             return root;
19         }
20 
21         /// <summary>
22         /// 迭代
23         /// </summary>
24         /// <param name="root"></param>
25         /// <returns></returns>
26         public TreeNode InvertTree2(TreeNode root)
27         {
28             if (root == null) return null;
29             var stack = new Stack<TreeNode>();
30             stack.Push(root);
31             while (stack.Any())
32             {
33                 var pop = stack.Pop();
34                 var temp = pop.left;
35                 pop.left = pop.right;
36                 pop.right = temp;
37                 if (pop.left != null) stack.Push(pop.left);
38                 if (pop.right != null) stack.Push(pop.right);
39             }
40             return root;
41         }
42     }
43 
44     public class TreeNode
45     {
46         public int val;
47         public TreeNode left;
48         public TreeNode right;
49         public TreeNode(int x) { val = x; }
50     }

 

LeetCode 226. 翻转二叉树(C#实现)——二叉树,递归,迭代

标签:白板   左右   sum   param   logs   面试   get   stack   二叉树   

原文地址:https://www.cnblogs.com/zxxxx/p/12155637.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!