【面试题19】二叉树的镜像

【题目描述】

请完成一个函数,输入一个二叉树,该函数输出它的镜像。

【解决方案】

即反转二叉树,左右结点互换,用递归解决。

我的代码实现,仅供参考:

 1         public static BinaryTreeNode ReverseBT(BinaryTreeNode node)
 2         {
 3             if (node == null)
 4             {
 5                 return node;
 6             }
 7 
 8             if (node.Left == null && node.Right == null)
 9             {
10                 return node;
11             }
12 
13             BinaryTreeNode temp = ReverseBT(node.Left);
14             node.Left = ReverseBT(node.Right);
15             node.Right = temp;
16 
17             return node;
18         }

【本题扩展】

上面代码使用递归实现的。如果要求用循环,该如何实现?

一说到递归,必然要想到栈。

我的代码实现,仅供参考:

 1         public static BinaryTreeNode ReverseBT(BinaryTreeNode root)
 2         {
 3             if (root == null)
 4             {
 5                 return root;
 6             }
 7 
 8             BinaryTreeNode temp = null, node = null;
 9 
10             Stack<BinaryTreeNode> stack = new Stack<BinaryTreeNode>();
11             stack.Push(root);
12 
13             while (stack.Count > 0)
14             {
15                 node = stack.Pop();
16 
17                 temp = node.Left;
18                 node.Left = node.Right;
19                 node.Right = temp;
20 
21                 if (node.Left != null)
22                 {
23                     stack.Push(node.Left);
24                 }
25 
26                 if (node.Right != null)
27                 {
28                     stack.Push(node.Right);
29                 }
30             }
31 
32             return root;
33         }

 

posted @ 2015-09-13 00:25  叫我霍啊啊啊  阅读(193)  评论(0编辑  收藏  举报