二叉树排序总结

62 阅读1分钟

中序

左右根


/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func inorderTraversal(root *TreeNode)  []int {
	var inorder func(node *TreeNode)
    res :=make([]int,0)
	inorder = func(node *TreeNode) {
		if node == nil {
			return
		}
		inorder(node.Left)
		res = append(res, node.Val)
		inorder(node.Right)
	}
	inorder(root)
	return res
}

前序

根左右

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func preorderTraversal(root *TreeNode) []int {
     var dfs func(root *TreeNode)
     res := make([]int,0)
     dfs = func(root *TreeNode){
          if root == nil{
              return
          }
          res = append(res,root.Val)
          dfs(root.Left)
          dfs(root.Right)
     }
     dfs(root)
     return res
}

后序

左右根

func postorderTraversal(root *TreeNode) (res []int) {
    var postorder func(*TreeNode)
    postorder = func(node *TreeNode) {
        if node == nil {
            return
        }
        postorder(node.Left)
        postorder(node.Right)
        res = append(res, node.Val)
    }
    postorder(root)
    return
}

层序

bfs

func levelOrder(root *TreeNode) [][]int {
	var (
		queue []*TreeNode
		ans   [][]int
	)

	//bfs
	if root != nil { // 防空特判
		queue = append(queue, root)
	}
	for len(queue) > 0 {
		levelNode := make([]int, len(queue)) // 每一层节点值
		for i := range levelNode {
			cur := queue[0] // front
			queue = queue[1:]
			levelNode[i] = cur.Val

			if cur.Left != nil {
				queue = append(queue, cur.Left)
			}
			if cur.Right != nil {
				queue = append(queue, cur.Right)
			}
		}
		ans = append(ans, levelNode)
	}

	return ans
}