描述
翻转一棵二叉树。
示例:
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
思路
1. 递归
先递归自己的左右树 然后交换自己的左右树
2. 非递归
遍历每一个节点 并将自己的左右节点交换
实现
func invertTree(root *TreeNode) *TreeNode {
if root == nil{
return root
}
root.Left = invertTree(root.Left)
root.Right = invertTree(root.Right)
left := root.Left
root.Left = root.Right
root.Right = left
return root
}
func invertTree(root *TreeNode) *TreeNode {
stack := make([]*TreeNode, 0)
curNode := root
for curNode != nil || len(stack) > 0{
for curNode != nil{
stack = append(stack, curNode)
curNode = curNode.Left
}
top := stack[len(stack) - 1]
stack = stack[0: len(stack) - 1]
curNode = top.Right
left := top.Left
top.Left = top.Right
top.Right = left
}
return root
}