翻转一棵二叉树。
示例:
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
二叉树的先序遍历
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
}
二叉树的深度优先
func invertTree(root *TreeNode) *TreeNode {
if root == nil{
return root
}
st := make([]*TreeNode, 0)
st = append(st, root)
for len(st)>0{
node := st[len(st)-1]
st = st[:len(st)-1]
node.Left, node.Right = node.Right, node.Left
if node.Left != nil{
st = append(st, node.Left)
}
if node.Right != nil{
st =append(st, node.Right)
}
}
return root
}
二叉树的层次遍历
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func invertTree(root *TreeNode) *TreeNode {
if root == nil{
return root
}
queue := make([]*TreeNode, 0)
queue = append(queue, root)
for len(queue)>0{
l := len(queue)
for l >0{
l--
node := queue[0]
queue = queue[1:]
node.Left, node.Right = node.Right, node.Left
if node.Left != nil{
queue = append(queue, node.Left)
}
if node.Right != nil{
queue = append(queue, node.Right)
}
}
}
return root
}