LeetCode hot 力扣热题100 翻转二叉树
运行步骤解析:invertTree 函数
该函数的目的是通过递归反转二叉树的每一个节点,使得每个节点的左子树和右子树交换。
代码解释:
1. 函数定义:
TreeNode* invertTree(TreeNode* root)
这是一个递归函数,它接受一个二叉树的根节点 root,并返回反转后的二叉树的根节点。
2. 递归终止条件:
if (root)
如果 root 是 nullptr(表示空树或叶子节点),则不做任何操作,直接返回 nullptr。
3. 交换左右子树:
swap(root->left, root->right);
对于每个节点,交换其左子树和右子树。
4. 递归调用:
invertTree(root->left);
invertTree(root->right);
递归地反转左子树和右子树。
5. 返回根节点:
return root;
返回反转后的树的根节点。
运行步骤示例:
假设原始二叉树如下:
1
/ \
2 3
/ \
4 5
我们将通过递归反转这棵树。
步骤 1: 初始调用
invertTree(root) // root = 1
• 当前节点为 1。
• 交换左子树(节点 2)和右子树(节点 3):
1
/ \
3 2
/ \
5 4
步骤 2: 递归调用左子树
invertTree(root->left) // root = 3
• 当前节点为 3。
• 节点 3 无左子树和右子树,因此无需交换,直接返回。
步骤 3: 递归调用右子树
invertTree(root->right) // root = 2
• 当前节点为 2。
• 交换左子树(节点 4)和右子树(节点 5):
2
/ \
5 4
步骤 4: 递归调用左子树
invertTree(root->left) // root = 5
• 节点 5 无左子树和右子树,因此无需交换,直接返回。
步骤 5: 递归调用右子树
invertTree(root->right) // root = 4
• 节点 4 无左子树和右子树,因此无需交换,直接返回。
最终结果:
经过上述递归过程,最终的反转后的树结构为:
1
/ \
3 2
/ \
5 4
总结:
• 每次递归交换当前节点的左右子树。
• 递归继续深入到每个子树,直到到达叶子节点(没有子树的节点)。
• 每次交换后,最终返回的是反转后的根节点。