js实现二叉树遍历
Posted 遥岑.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js实现二叉树遍历相关的知识,希望对你有一定的参考价值。
目录
二叉树
二叉树是树中每个节点最多只能有两个子节点的树。
分类:
-
满二叉树
如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。
-
完全二叉树
在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2^(h-1) 个节点。
-
二叉搜索树
二叉搜索树是一个有序树。 -
若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
-
若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
-
它的左、右子树也分别为二叉排序树
-
平衡二叉树
它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
二叉树遍历
前序遍历
- 根-左-右
- 递归
var preorderTraversal = function(root)
let res = []
function pre(node)
if(node === null) return
res.push(node.val)
pre(node.left)
pre(node.right)
pre(root)
return res
;
- 迭代
var preorderTraversal = function(root)
let res = []
let stack = [root]
while(stack.length)
let n = stack.pop()
if(n)
res.push(n.val)
stack.push(n.right)
stack.push(n.left)
return res
;
中序遍历
-
左-根-右
-
递归
var inorderTraversal = function(root)
let res = []
function ino(root)
// root为null终止条件
if(!root) return
ino(root.left)
res.push(root.val)
ino(root.right)
ino(root)
return res
;
- 迭代
var inorderTraversal = function(root)
// 迭代
let stack = []
let res = []
let cur = root
while(stack.length || cur)
if(cur)
stack.push(cur)
cur = cur.left
else
cur = stack.pop()
res.push(cur.val)
cur = cur.right
return res
;
后序遍历
-
左-右-根
-
递归
var postorderTraversal = function(root)
let res = []
function post(root)
if(!root) return
let n = root.val
post(root.left)
post(root.right)
res.push(n)
post(root)
return res
;
- 迭代
var postorderTraversal = function(root)
// 迭代
let res = []
// 后序是左右根--反过来是根右左--为了让右先出栈,先将左压入栈再压右
let stack = [root]
while(stack.length !== 0)
let n = stack.pop()
// n为null的情况
if(n)
res.push(n.val)
stack.push(n.left)
stack.push(n.right)
// 最后反转
return res.reverse()
;
层序遍历
var levelOrder = function(root)
if(!root) return []
let res = []
// 队列 先进先出
let queue = [root]
while(queue.length)
// 定义循环次数 每一层的个数
let len = queue.length
// 保存当前层
let cur = []
for(let i=0;i<len;i++)
let node = queue.shift()
cur.push(node.val)
// 将左右子树入队
node.left && queue.push(node.left)
node.right && queue.push(node.right)
res.push(cur)
return res
;
以上是关于js实现二叉树遍历的主要内容,如果未能解决你的问题,请参考以下文章