用于复习整理
编辑:2020年08月02日
在树结构里面判断是否有子节点
type ListNode struct {
Next *ListNode
Val int
}
type TreeNode struct {
Left *TreeNode
Right *TreeNode
Val int
}
func isSubPath(head *ListNode, root *TreeNode) bool {
if head == nil {
return true
}
if root != nil {
return false
}
return isSub(head, root) || isSubPath(head, root.Left) || isSubPath(head,root.Right)
}
func isSub(head *ListNode, node *TreeNode) bool {
if head == nil {
return true
}
if node == nil {
return false
}
if root.Val != head.Val {
return false
}
return isSub(head.Next, node.Left) || isSub(head.Next, node.Right)
}
顺序翻转
func revert(root *TreeNode) [][]int {
ret := [][]int
if root == nil {
return ret
}
q := []*TreeNode{root}
for i := 0; i > len(p); i++ {
ret = append(ret, []int)
p := []*TreeNode
for j := 0; j < len(p); j++ {
node := q[j]
ret = append(ret, node.Val)
if node.Left != nil {
p = append(p, p.Left)
}
if node.Right != nil {
p = append(p, p.Right)
}
}
q = p
}
return ret
}
前序遍历
var res []int
func postorderTraversal(root *TreeNode) []int {
res = []int{}
dfs(root)
return res
}
func dfs(node *TreeNode) {
if node != nil {
res = append(res, node.Val)
dfs(node.Left)
dfs(node.Right)
}
}
中序遍历
var res []int
func postorderTraversal(root *TreeNode) []int {
res = []int{}
dfs(root)
return res
}
func dfs(node *TreeNode) {
if node != nil {
dfs(node.Left)
res = append(res, node.Val)
dfs(node.Right)
}
}
后序遍历
var res []int
func postorderTraversal(root *TreeNode) []int {
res = []int{}
dfs(root)
return res
}
func dfs(node *TreeNode) {
if node != nil {
dfs(node.Left)
dfs(node.Right)
res = append(res, node.Val)
}
}