二叉树的镜像
问题陈述
请完成一个函数,输入一个二叉树,该函数输出它的镜像。
1 2 3 4 5 6 7 8 9 10 11 12
| 例如输入: 4 / \ 2 7 /\ /\ 1 3 6 9 镜像输出: 4 / \ 7 2 / \ / \ 9 6 3 1
|
思路分析
如何实现镜像反转,其实就是从上到下对每个结点的左右结点进行交换,如果存在左(右)结点一个为空,则同样与空结点进行交换。
考虑栈结构的特性,可以用栈暂存结点。先根结点入栈,当栈不空,定义输出镜像为弹出的栈顶元素。继续,如果根结点的左结点不空,加入左结点;右结点不空,加入右结点。然后实现交换左右结点。
如此,实现。
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class BinaryTree_Mirror { public TreeNode treeMirror(TreeNode root){ if(root==null) return null; Stack<TreeNode> stack=new Stack<>(); stack.push(root); while (!stack.isEmpty()){ TreeNode node=stack.pop(); if(node.left!=null) stack.push(node.left); if(node.right!=null) stack.push(node.right); TreeNode curr=node.left; node.left=node.right; node.right=curr; } return root; } }
|