题目描述
给你一棵二叉树的根节点 root
,翻转这棵二叉树,并返回其根节点。
示例 1:
输入: root = [4,2,7,1,3,6,9]
输出: [4,7,2,9,6,3,1]
示例 2:
输入: root = [2,1,3]
输出: [2,3,1]
示例 3:
输入: root = []
输出: []
提示:
- 树中节点数目范围在 [0, 100] 内
- -100 <= Node.val <= 100
代码及注释
/*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/func invertTree(root *TreeNode) *TreeNode {// 如果根节点为空,直接返回if root == nil {return nil}// 递归地反转左子树和右子树left := invertTree(root.Left)right := invertTree(root.Right)// 交换左右子树root.Left = rightroot.Right = leftreturn root
}
代码解释
-
空节点检查:
if root == nil {return nil }
- 如果当前节点
root
为空,直接返回nil
。
- 如果当前节点
-
递归反转左右子树:
left := invertTree(root.Left) right := invertTree(root.Right)
- 使用递归的方法反转左子树和右子树。
-
交换左右子树:
root.Left = right root.Right = left
- 交换左子树和右子树。
整个函数的逻辑很简单,它首先递归地反转左右子树,然后交换左右子树。最后返回反转后的根节点。
这个递归的解法的时间复杂度是 O(n),其中 n 是二叉树的节点数。