mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 08:50:15 +08:00
添加226翻转子树 go版本的递归后序遍历,迭代前后序遍历,层序遍历
This commit is contained in:
@ -365,6 +365,8 @@ class Solution:
|
|||||||
|
|
||||||
### Go
|
### Go
|
||||||
|
|
||||||
|
递归版本的前序遍历
|
||||||
|
|
||||||
```Go
|
```Go
|
||||||
func invertTree(root *TreeNode) *TreeNode {
|
func invertTree(root *TreeNode) *TreeNode {
|
||||||
if root ==nil{
|
if root ==nil{
|
||||||
@ -381,6 +383,96 @@ func invertTree(root *TreeNode) *TreeNode {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
递归版本的后序遍历
|
||||||
|
|
||||||
|
```go
|
||||||
|
func invertTree(root *TreeNode) *TreeNode {
|
||||||
|
if root==nil{
|
||||||
|
return root
|
||||||
|
}
|
||||||
|
invertTree(root.Left)//遍历左节点
|
||||||
|
invertTree(root.Right)//遍历右节点
|
||||||
|
root.Left,root.Right=root.Right,root.Left//交换
|
||||||
|
return root
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
迭代版本的前序遍历
|
||||||
|
|
||||||
|
```go
|
||||||
|
func invertTree(root *TreeNode) *TreeNode {
|
||||||
|
stack:=[]*TreeNode{}
|
||||||
|
node:=root
|
||||||
|
for node!=nil||len(stack)>0{
|
||||||
|
for node!=nil{
|
||||||
|
node.Left,node.Right=node.Right,node.Left//交换
|
||||||
|
stack=append(stack,node)
|
||||||
|
node=node.Left
|
||||||
|
}
|
||||||
|
node=stack[len(stack)-1]
|
||||||
|
stack=stack[:len(stack)-1]
|
||||||
|
node=node.Right
|
||||||
|
}
|
||||||
|
return root
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
迭代版本的后序遍历
|
||||||
|
|
||||||
|
```go
|
||||||
|
func invertTree(root *TreeNode) *TreeNode {
|
||||||
|
stack:=[]*TreeNode{}
|
||||||
|
node:=root
|
||||||
|
var prev *TreeNode
|
||||||
|
for node!=nil||len(stack)>0{
|
||||||
|
for node!=nil{
|
||||||
|
stack=append(stack,node)
|
||||||
|
node=node.Left
|
||||||
|
}
|
||||||
|
node=stack[len(stack)-1]
|
||||||
|
stack=stack[:len(stack)-1]
|
||||||
|
if node.Right==nil||node.Right==prev{
|
||||||
|
node.Left,node.Right=node.Right,node.Left//交换
|
||||||
|
prev=node
|
||||||
|
node=nil
|
||||||
|
}else {
|
||||||
|
stack=append(stack,node)
|
||||||
|
node=node.Right
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return root
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
层序遍历
|
||||||
|
|
||||||
|
```go
|
||||||
|
func invertTree(root *TreeNode) *TreeNode {
|
||||||
|
if root==nil{
|
||||||
|
return root
|
||||||
|
}
|
||||||
|
queue:=list.New()
|
||||||
|
node:=root
|
||||||
|
queue.PushBack(node)
|
||||||
|
for queue.Len()>0{
|
||||||
|
length:=queue.Len()
|
||||||
|
for i:=0;i<length;i++{
|
||||||
|
e:=queue.Remove(queue.Front()).(*TreeNode)
|
||||||
|
e.Left,e.Right=e.Right,e.Left//交换
|
||||||
|
if e.Left!=nil{
|
||||||
|
queue.PushBack(e.Left)
|
||||||
|
}
|
||||||
|
if e.Right!=nil{
|
||||||
|
queue.PushBack(e.Right)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return root
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### JavaScript
|
### JavaScript
|
||||||
|
|
||||||
使用递归版本的前序遍历
|
使用递归版本的前序遍历
|
||||||
|
Reference in New Issue
Block a user