二叉树——深度、广度优先遍历
二叉树遍历一般都会使用深度遍历或者广度遍历。那什么是深度与广度遍历呢?
打个比方,在走迷宫的时候,有很多分岔口,深度遍历的方式就是,一直往左岔口走,走到头了,到上一个岔口的另一个岔口再走。广度遍历就是再分岔口的时候,变出很多个分身,每个分身走一个岔口。
在二叉树中深度遍历有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
一个靠互联网苟且偷生的程序员
咱们下期见!
扫描二维码关注我吧
