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

总结:

• 每次递归交换当前节点的左右子树。

• 递归继续深入到每个子树,直到到达叶子节点(没有子树的节点)。

• 每次交换后,最终返回的是反转后的根节点。

你可能感兴趣的:(leetcode,算法,职场和发展)