给你一棵二叉树的根节点 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
题解:
递归法(前序遍历):
// 时间复杂度:O(n)
// 空间复杂度:O(n)
func invertTree(root *TreeNode) *TreeNode {
if root == nil {
return nil
}
root.Left, root.Right = root.Right, root.Left
invertTree(root.Left)
invertTree(root.Right)
return root
}
使用栈的迭代法(前序遍历):
// 时间复杂度:O(n)
// 空间复杂度:O(n)
func invertTree(root *TreeNode) *TreeNode {
if root == nil {
return nil
}
stack := list.New()
stack.PushBack(root)
for stack.Len() > 0 {
node := stack.Remove(stack.Back()).(*TreeNode)
node.Left, node.Right = node.Right, node.Left
if node.Right != nil {
stack.PushBack(node.Right)
}
if node.Left != nil {
stack.PushBack(node.Left)
}
}
return root
}
使用队列的层序遍历:
// 时间复杂度:O(n)
// 空间复杂度:O(n)
func invertTree(root *TreeNode) *TreeNode {
if root == nil {
return nil
}
queue := list.New()
queue.PushBack(root)
for queue.Len() > 0 {
length := queue.Len()
for i := 0; i < length; i++ {
node := queue.Remove(queue.Front()).(*TreeNode)
node.Left, node.Right = node.Right, node.Left
if node.Left != nil {
queue.PushBack(node.Left)
}
if node.Right != nil {
queue.PushBack(node.Right)
}
}
}
return root
}
评论前必须登录!
注册