二叉树的四种遍历方式

138 阅读1分钟

简介:

4种二叉树遍历方式为:

  1. 先序遍历;
  2. 中序遍历;
  3. 后序遍历;
  4. 层序遍历(使用较少)。

第一种:先序遍历 ( 根 左 右)

image.png

function preOrderTraversal(root) {
	const result = [];
	if (!root) return result;

	function dfs(node) {
		if (!node) return;
		result.push(node.val);
		node.left && dfs(node.left);
		node.right && dfs(node.right);
	}
	dfs(root);

	return result;
}

第二种:中序遍历 (左 根 右)

image.png

function midOrderTraversal(root) {
	const result = [];
	if (!root) return result;

	function dfs(node) {
		if (!node) return;
		node.left && dfs(node.left);
		result.push(node.val);
		node.right && dfs(node.right);
	}
	dfs(root);

	return result;
}

第三种:后序遍历 (左 右 根)

image.png

function postOrderTraversal(root) {
	const result = [];
	if (!root) return result;

	function dfs(node) {
		if (!node) return;
		node.left && dfs(node.left);
		node.right && dfs(node.right);
		result.push(node.val);
	}
	dfs(root);

	return result;
}

第四种:层序遍历( 第一层 第二层 第三层依次遍历, 类似于广度优先遍历)

image.png

function levelOrderTraversal(root) {
	const result = [];
	if (!root) return result;

![image.png](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4994d756965b4d5c8c595a8e95dcf988~tplv-k3u1fbpfcp-watermark.image)
	const queue = [root];
	while (queue.length) {
		const node = queue.shift();
		result.push(node.val);
		node.left && queue.push(node.left);
		node.right && queue.push(node.right);
	}

	return result;
}

测试代码

const tree = {
	val: 1,
	left: {
		val: 2,
		left: {
			val: 3,
			left: {
				val: 5,
				left: null,
				right: null
			},
			right: null
		},
		right: {
			val: 4,
			left: null,
			right: null
		}
	},
	right: {
		val: 6,
		left: null,
		right: {
			val: 7,
			left: null,
			right: {
				val: 8,
				left: null,
				right: {
					val: 9,
					left: null,
					right: {
						val: 10,
						left: null,
						right: null
					}
				}
			}
		}
	}
};
console.log("先序遍历:", preOrderTraversal(tree));
console.log("中序遍历:", midOrderTraversal(tree));
console.log("后序遍历:", postOrderTraversal(tree));
console.log("层序遍历:", levelOrderTraversal(tree));
// 先序遍历: [
// 	1, 2, 3, 5,  4,
// 	6, 7, 8, 9, 10
// ]
// 中序遍历: [
// 	5, 3, 2, 4,  1,
// 	6, 7, 8, 9, 10
// ]
// 后序遍历: [
// 	5, 3, 4, 2, 10,
// 	9, 8, 7, 6,  1
// ]
// 层序遍历: [
// 	1, 2, 6, 3,  4,
// 	7, 5, 8, 9, 10
// ]