graph TB A((1)) B((2)) C((3)) D((4)) E((5)) F((6)) G((7)) A---B A---C B---D B---E C---F C---G
二叉树的遍历可以分为深度优先遍历和广度优先遍历两种
深度优先遍历也就是常说的前序、中序、后序遍历,可以通过递归和栈两种方式来实现
广度优先遍历就是按层次顺序遍历,可以通过队列来实现
上图四种遍历方式的结果依次为
前序遍历:1, 2,4,5,3,6,7
中序遍历:4、2, 5,1,6,7,3
后序遍历:4, 5、2,6,7,3,1
广度优先遍历:1, 2,4,5,3,6,7
树结构定义
1 | type Node struct { |
深度优先遍历
递归实现
前序遍历
1 | func (n *Node) PreOrder() { |
中序遍历
1 | func (n *Node) InOrder() { |
后序遍历
1 | func (n *Node) PostOrder() { |
迭代实现
递归实现比较直观,层数过多时对性能影响较大
出了递归还可以通过栈结构来辅助实现迭代遍历,但相较于递归方式就不那么容易理解
简单的实现了一个栈
1 | type Stack struct { |
前序遍历
1 | func (n *Node) PreOrder() { |
中序遍历
1 | func (n *Node) InOrder() { |
后序遍历
1 | func (tn *TreeNode) PostOrder() { |
广度优先遍历
1 | func (n *Node) BreadthFirstSearch() { |