在解决问题之前,要先弄懂问题是什么,可以先向面试官阐述自己的思想,有时候可以借助画图的方法来让自己的想法更加直观。
题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。
方法:递归调换左右子树
思路:遍历树的每一个结点,如果他的左右子树又一个不为空,那么就调换左右子树。
- 时间复杂度O(n),n 为树 A 中结点的个数
- 空间复杂度O(n),递归栈需要空间
public TreeNode mirrorTree(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;
}
root.left = mirrorTree(root.left);
root.right = mirrorTree(root.right);
return root;
}