代码随想录算法训练营Day14 | 二叉树的递归遍历

48 阅读1分钟

LeetCode题目

144.二叉树的前序遍历

题目链接:Binary Tree Preorder Traversal - LeetCode

代码如下:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func traversal(node *TreeNode, res *[]int) {
	if node == nil {
		return
	}
	*res = append(*res, node.Val)
	traversal(node.Left, res)
	traversal(node.Right, res)
}

func preorderTraversal(root *TreeNode) []int {
	res := []int{}
	traversal(root, &res)
	return res
}

145.二叉树的后序遍历

题目链接:Binary Tree Postorder Traversal - LeetCode

代码如下:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func traversal(node *TreeNode, res *[]int) {
	if node == nil {
		return
	}
	traversal(node.Left, res)
	traversal(node.Right, res)
	*res = append(*res, node.Val)
}

func postorderTraversal(root *TreeNode) []int {
	res := []int{}
	traversal(root, &res)
	return res
}

94.二叉树的中序遍历

题目链接:Binary Tree Inorder Traversal - LeetCode

代码如下:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func traversal(node *TreeNode, res *[]int) {
	if node == nil {
		return
	}
	traversal(node.Left, res)
	*res = append(*res, node.Val)
	traversal(node.Right, res)
}

func inorderTraversal(root *TreeNode) []int {
	res := []int{}
	traversal(root, &res)
	return res
}

总结

  1. 递归三要素:递归函数的参数和返回值、终止条件、单层递归的逻辑
  2. 二叉树种类:满二叉树、完全二叉树、二叉搜索树、平衡二叉搜索树
  3. 二叉树的存储方式:链式存储(指针)、顺序存储(数组)
  4. 二叉树的遍历方式:深度优先遍历(前/中/后序遍历)、广度优先遍历(层次遍历)