二叉树遍历
前序遍历
遍历顺序:根左右(
DFS 深度优先遍历)
先访问根节点,然后遍历左子树,最后遍历右子树

结果:ABDECF
递归实现
1 | var preorderTraversal = function (root, array = []) { |
非递归实现
从根节点开始遍历:
访问节点值
左孩子入栈,直到节点左孩子为空
节点出栈,以节点的右孩子为目标重复
1,2,3
1 | var preorderTraversal = function (root) { |
中序遍历
遍历顺序:左根右
先遍历左子树,然后访问根节点,最后遍历右子树

结果:DBEAFC
递归实现
1 | var inorderTraversal = function (root, array = []) { |
非递归实现
从根节点开始遍历:
左孩子入栈,直到节点左孩子为空
出栈并访问节点值
以节点的右孩子为目标重复
1,2,3
1 | var inorderTraversal = function (root) { |
后序遍历
遍历顺序:左右根
先遍历左子树,然后遍历右子树,最后访问根节点

结果:DEBFCA
递归实现
1 | var postorderTraversal = function (root, array = []) { |
非递归实现
从根节点开始遍历:
左孩子入栈,直到节点左孩子为空
检查栈顶的节点,如果右节点为空或者右节点被访问过,节点出栈并访问,并标记节点为已访问
如果栈顶的右节点不为空且未访问,以节点的右孩子为目标重复
1,2,3
1 | var postorderTraversal = function (root) { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 乱炖锅!
评论





