剑指No.27_二叉树的镜像
- 题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。
例如输入:
4
/ \
2 7
/ \ / \
1 3 6 9
镜像输出:
4
/ \
7 2
/ \ / \
9 6 3 1
示例:输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
- 实际的实现过程就是在遍历二叉树的同时对每个非子节点的左右子节点进行交换,便得到一颗镜像二叉树
- 方法一:递归遍历二叉树
public TreeNode mirrorTreeWay(TreeNode root){
//根节点为空返回
if (root == null) return root;
//左或右子节点不为空就进入交换和递归
if (root.left != null || root.right != null){
//交换左右子节点
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
//递归的遍历二叉树
mirrorTreeWay(root.left);
mirrorTreeWay(root.right);
}
return root;
}
- 方法二:迭代遍历二叉树:
public TreeNode mirrorTreeWay(TreeNode root){
if (root == null) return root;
//用linkedlist充当栈
LinkedList<TreeNode> stack = new LinkedList<>();
stack.addFirst(root);
while (!stack.isEmpty()){
TreeNode node = stack.removeFirst();
if (node.left != null) stack.addFirst(node.left);
if (node.right != null) stack.addFirst(node.right);
TreeNode temp = node.left;
node.left = node.right;
node.right = temp;
}
return root;
}