参考网站:代码随想录 (programmercarl.com)
目录
参考网站:代码随想录 (programmercarl.com)
递归遍历法
递归三部曲:确定递归函数的返回值和参数、确定终止条件、处理逻辑
确定递归函数的返回值和参数
返回值是二叉树的根节点TreeNode,函数参数是待翻转的二叉树根节点root
终止条件
root 为 null
处理逻辑
前序遍历过程:以下面这颗而二叉树为例(左中右)
遍历至1:交换2,3
遍历至3:交换6,7
遍历至7:7的left节点为空,返回到7
遍历至7: 7的right为空,返回到 7
遍历至6:6的left节点为空,返回到6
遍历至6:7的right为空,返回到 6
遍历至2:交换4,5
遍历至5:7的left节点为空,返回到5
遍历至5: 7的right为空,返回到 5
遍历至4:6的left节点为空,返回到4
遍历至4:7的right为空,返回到 4
至此1的左右子树遍历完毕,返回节点1;
前序遍历代码
定义二叉树
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
前序翻转二叉树
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null) return root;
swapChildren(root);
invertTree(root.left);
invertTree(root.right);
return root;
}
public void swapChildren(TreeNode root){
TreeNode tmp = root.left;
root.left = root.right;
root.right = tmp;
}
}
后序遍历(左右中)
遍历至4:4的left为空,返回4
遍历至4:4的right为空,返回4
遍历至5:5的left为空,返回5
遍历至5:5的right为空,返回5
遍历至2:交换4,5
遍历至6:6的left为空,返回6
遍历至6:6的right为空,返回6
遍历至7:7的left为空,返回7
遍历至7:7的right为空,返回7
遍历至3:交换6,7
遍历至1:交换2,3。至此遍历结束,函数返回节点1
后序遍历代码(左右中)
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null) return root;
invertTree(root.left);
invertTree(root.right);
swapChildren(root);
return root;
}
public void swapChildren(TreeNode root){
TreeNode tmp = root.left;
root.left = root.right;
root.right = tmp;
}
}
中序遍历代码(左中右)
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null) return root;
invertTree(root.left);
swapChildren(root);
invertTree(root.left);
return root;
}
public void swapChildren(TreeNode root){
TreeNode tmp = root.left;
root.left = root.right;
root.right = tmp;
}
}
编辑 | 发量惊人的宝芙
侵权必删!!!