思路:
将每一结点的左右子树进行交换,与先序遍历、后序遍历的思路相同,只是将访问结点的方式改为交换子树
注意: 不能使用中序遍历,会出现原先的右子树没有翻转,由于中间翻转会导致将处理好的左节点翻转到右侧,而原先右侧还未翻转的结点被转移到左侧,这样原先右侧的结点一直每被翻转过
代码:
以先序遍历方式为例
TreeNode invertTree(TreeNode root) {
// base case
if (root == null) {
return null;
}
//访问结点
TreeNode tmp = root.left;
root.left = root.right;
root.right = tmp;
// 让左右⼦节点继续翻转它们的⼦节点
invertTree(root.left);
invertTree(root.right);
return root; }