mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 19:44:45 +08:00
添加 二叉树:以为使用了递归,其实还隐藏着回溯 go版本
添加 二叉树:以为使用了递归,其实还隐藏着回溯 go版本
This commit is contained in:
@ -336,6 +336,110 @@ class Solution:
|
||||
```
|
||||
|
||||
Go:
|
||||
100.相同的树
|
||||
```go
|
||||
/**
|
||||
* Definition for a binary tree node.
|
||||
* type TreeNode struct {
|
||||
* Val int
|
||||
* Left *TreeNode
|
||||
* Right *TreeNode
|
||||
* }
|
||||
*/
|
||||
func isSameTree(p *TreeNode, q *TreeNode) bool {
|
||||
switch {
|
||||
case p == nil && q == nil:
|
||||
return true
|
||||
case p == nil || q == nil:
|
||||
fmt.Println(p,q)
|
||||
fallthrough
|
||||
case p.Val != q.Val:
|
||||
return false
|
||||
}
|
||||
return isSameTree(p.Left, q.Left) && isSameTree(p.Right, q.Right)
|
||||
}
|
||||
```
|
||||
|
||||
257.二叉的所有路径
|
||||
> 递归法
|
||||
|
||||
```go
|
||||
/**
|
||||
* Definition for a binary tree node.
|
||||
* type TreeNode struct {
|
||||
* Val int
|
||||
* Left *TreeNode
|
||||
* Right *TreeNode
|
||||
* }
|
||||
*/
|
||||
func binaryTreePaths(root *TreeNode) []string {
|
||||
var result []string
|
||||
traversal(root,&result,"")
|
||||
return result
|
||||
}
|
||||
func traversal(root *TreeNode,result *[]string,pathStr string){
|
||||
//判断是否为第一个元素
|
||||
if len(pathStr)!=0{
|
||||
pathStr=pathStr+"->"+strconv.Itoa(root.Val)
|
||||
}else{
|
||||
pathStr=strconv.Itoa(root.Val)
|
||||
}
|
||||
//判断是否为叶子节点
|
||||
if root.Left==nil&&root.Right==nil{
|
||||
*result=append(*result,pathStr)
|
||||
return
|
||||
}
|
||||
//左右
|
||||
if root.Left!=nil{
|
||||
traversal(root.Left,result,pathStr)
|
||||
}
|
||||
if root.Right!=nil{
|
||||
traversal(root.Right,result,pathStr)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
> 回溯法
|
||||
|
||||
```go
|
||||
/**
|
||||
* Definition for a binary tree node.
|
||||
* type TreeNode struct {
|
||||
* Val int
|
||||
* Left *TreeNode
|
||||
* Right *TreeNode
|
||||
* }
|
||||
*/
|
||||
func binaryTreePaths(root *TreeNode) []string {
|
||||
var result []string
|
||||
var path []int
|
||||
traversal(root,&result,&path)
|
||||
return result
|
||||
}
|
||||
func traversal(root *TreeNode,result *[]string,path *[]int){
|
||||
*path=append(*path,root.Val)
|
||||
//判断是否为叶子节点
|
||||
if root.Left==nil&&root.Right==nil{
|
||||
pathStr:=strconv.Itoa((*path)[0])
|
||||
for i:=1;i<len(*path);i++{
|
||||
pathStr=pathStr+"->"+strconv.Itoa((*path)[i])
|
||||
}
|
||||
*result=append(*result,pathStr)
|
||||
return
|
||||
}
|
||||
//左右
|
||||
if root.Left!=nil{
|
||||
traversal(root.Left,result,path)
|
||||
*path=(*path)[:len(*path)-1]//回溯到上一个节点(因为traversal会加下一个节点值到path中)
|
||||
}
|
||||
if root.Right!=nil{
|
||||
traversal(root.Right,result,path)
|
||||
*path=(*path)[:len(*path)-1]//回溯
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user