NOTE

实现二叉树先序中序和后序遍历

实现二叉树先序、中序和后序遍历的笔记。

Data Structures & Algorithms创建于 更新于 约 1 分钟读完historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 题目描述

分别按照二叉树先序,中序和后序打印所有的节点。

2. 思路

  1. 思路一
    • 递归
  2. 思路二
    • 颜色标记法

3. 实现

package main

/*
 * type TreeNode struct {
 *   Val int
 *   Left *TreeNode
 *   Right *TreeNode
 * }
 */

/**
 *
 * @param root TreeNode类 the root of binary tree
 * @return int整型二维数组
 */
func threeOrders(root *TreeNode) [][]int {
	if root == nil {
		return nil
	}

	res := make([][]int, 0)

	pre := make([]int, 0)
	preOrder(root, &pre)
	res = append(res, pre)

	mid := make([]int, 0)
	midOrder(root, &mid)
	res = append(res, mid)

	post := make([]int, 0)
	postOrder(root, &post)
	res = append(res, post)

	return res
}

func postOrder(root *TreeNode, res *[]int) {
	if root == nil {
		return
	}

	postOrder(root.Left, res)
	postOrder(root.Right, res)
	*res = append(*res, root.Val)
}

func midOrder(root *TreeNode, res *[]int) {
	if root == nil {
		return
	}

	midOrder(root.Left, res)
	*res = append(*res, root.Val)
	midOrder(root.Right, res)
}

func preOrder(root *TreeNode, res *[]int) {
	if root == nil {
		return
	}

	*res = append(*res, root.Val)
	preOrder(root.Left, res)
	preOrder(root.Right, res)
}

4. 参考

讨论

使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看