vlambda博客
学习文章列表

二叉树——深度、广度优先遍历

This browser does not support music or audio playback. Please play it in Weixin or another browser.


——前言:

    二叉树遍历一般都会使用深度遍历或者广度遍历。那什么是深度与广度遍历呢?


打个比方,在走迷宫的时候,有很多分岔口,深度遍历的方式就是,一直往左岔口走,走到头了,到上一个岔口的另一个岔口再走。广度遍历就是再分岔口的时候,变出很多个分身,每个分身走一个岔口。


在二叉树中深度遍历有3种方式:

有前序遍历:根结点 ---> 左子树 ---> 右子树

中序遍历:左子树---> 根结点 ---> 右子树

后序遍历:左子树 ---> 右子树 ---> 根结点


广度遍历也叫层次遍历:将树按一层层的规律来遍历,一般依靠队列来使用。


01

Code

public class TreeNode{ public int val; public TreeNode left; public TreeNode right; public TreeNode(int val = 0, TreeNode left = null, TreeNode right = null) { this.val = val; this.left = left; this.right = right; }}/// <summary>/// 深度优先——前序遍历/// </summary>/// <param name="root"></param>public void DFS_preOrderTraverse1(TreeNode root){ if (root != null) { Console.WriteLine(root.val + " ");  DFS_preOrderTraverse1(root.left); DFS_preOrderTraverse1(root.right); }} /// <summary> /// 深度优先——中序遍历 /// </summary> /// <param name="root"></param>public void DFS_inOrderTraverse1(TreeNode root){ if (root != null) { DFS_inOrderTraverse1(root.left); Console.WriteLine(root.val + " "); DFS_inOrderTraverse1(root.right); }}/// <summary>/// 深度优先——后序遍历/// </summary>/// <param name="root"></param>public void DFS_postOrderTraverse1(TreeNode root){ if (root != null) { DFS_postOrderTraverse1(root.left); DFS_postOrderTraverse1(root.right); Console.WriteLine(root.val + " "); }} /// <summary> /// 广度优先 /// </summary> /// <param name="root"></param>public void BFS_levelTraverse(TreeNode root){ if (root == null) { return; } Queue<TreeNode> queue = new Queue<TreeNode>();  queue.Enqueue(root); while (queue.Peek()!=null) { TreeNode node = queue.Dequeue(); Console.WriteLine(node.val + ""); if (node.left != null) { queue.Enqueue(node.left); } if (node.right != null) { queue.Enqueue(node.right); } }}





END



感谢阅读


你知道的越多,你不知道的越多

我是EAST

一个靠互联网苟且偷生的程序员

咱们下期见!




扫描二维码关注我吧



庚子年冲冲冲 发起了一个读者讨论 留言区