翻转一棵二叉树。
示例:
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
先序遍历:从顶向下替换,交换为所有节点后 再从跟节点开始
class Solution {
//先序便利二叉树
public TreeNode invertTree(TreeNode root) {
if(root == null){
return null;
}
//保存左子树
TreeNode leftRootNode = root.left;
//先左右交换 再遍历右子树 把右子树的所有左右节点都交换 最后赋予二叉树的最上层左节点
root.left = invertTree(root.right);
//先左右交换 再遍历左子树 把左子树的所有左右节点都交换 最后赋予二叉树的最上层右节点
root.right = invertTree(leftRootNode);
return root;
}
}
后续遍历:从下向上交换
class Solution {
public TreeNode invertTree(TreeNode root) {
// 后序遍历-- 从下向上交换
if (root == null) return null;
// 相当于再外面调用了一下invertTree(TreeNode root)方法 遍历二叉树左子树 交换左右节点
TreeNode leftNode = invertTree(root.left);
// 相当于再外面调用了一下invertTree(TreeNode root)方法 遍历二叉树右子树 交换左右节点
TreeNode rightNode = invertTree(root.right);
//交换根结点下面的左右节点
root.right = leftNode;
root.left = rightNode;
//递归返回上一层调用,继续上一层的左右节点交换
return root;
}
}