什么是二叉树?

原文链接:https://note.noxussj.top/?source=helloworld


什么是二叉树?

树中每个节点最多只能有两个子节点,在 JavaScript 中一般都是通过 Object 来模拟二叉树。

常用操作

  • 前序遍历
  • 中序遍历
  • 后序遍历

前序遍历

根左右。

口诀:

  1. 访问根节点
  2. 对根节点的左子树进行前序遍历
  3. 对根节点的右子树进行前序遍历

image

通过递归方式实现

1function preorder(root) { 2 if (!root) return 3 4 console.log(root.val) 5 preorder(root.left) 6 preorder(root.right) 7}

通过迭代方式实现

1function preorder(root) { 2 if (!root) return 3 4 const stack = [root] 5 6 while (stack.length) { 7 const n = stack.pop() 8 9 console.log(n) 10 if (n.right) stack.push(n.right) 11 if (n.left) stack.push(n.left) 12 } 13}

中序遍历

左根右。

口诀:

  1. 对根节点的左子树进行中序遍历
  2. 访问根节点
  3. 对根节点的右子树进行中序遍历

image

通过递归方式实现

1function inorder(root) { 2 if (!root) return 3 4 inorder(root.left) 5 console.log(root.val) 6 inorder(root.right) 7}javascript

通过迭代方式实现

1function inorder(root) { 2 if (!root) return 3 4 const stack = [root] 5 6 while (stack.length) { 7 const n = stack.pop() 8 9 console.log(n) 10 if (n.right) stack.push(n.right) 11 if (n.left) stack.push(n.left) 12 } 13}

后序遍历

左右根。

口诀:

  1. 对根节点的左子树进行后序遍历
  2. 对根节点的右子树进行后序遍历
  3. 访问根节点

image

通过递归方式实现

1function postorder(root) { 2 if (!root) return 3 4 postorder(root.left) 5 postorder(root.right) 6 console.log(root.val) 7}

通过迭代方式实现

1function postorder(root) { 2 if (!root) return 3 4 const outputStack = [] 5 const stack = [root] 6 7 while (stack.length) { 8 const n = stack.pop() 9 10 outputStack.push(n) 11 if (n.left) stack.push(n.left) 12 if (n.right) stack.push(n.right) 13 } 14 15 while (outputStack.length) { 16 const n = outputStack.pop() 17 console.log(n.val) 18 } 19}
点赞
收藏

评论区

加载中...

相关推荐

js实现二叉树、二叉查找树

树是一种数据结构,该章节讨论二叉树(二叉树的每个节点的子节点不允许超过两个),二叉树中有又分为完全二叉树和不完全二叉树.....不在本章节赘述相关概念,感兴趣可以去查阅《数据结构》。你将会获得:1.如何使用js实现二叉查找树。2.学会前、中、后序遍历。3.了解相关实现原理阅读时长5min,可选择直接调试代码特点    二叉查找树中序遍历后

前端学数据结构与算法:二叉树的四种遍历方式及其应用

前言上一章我们从0到1的实现了一颗二叉搜索树,以及理解了二叉搜索树的特性与基本操作,这一章介绍关于二叉树的更多操作,也就是树的遍历,对树的每个节点进行访问。主要包括前序遍历、中序遍历、后序遍历、层序遍历,前面三种也叫深度优先遍历(DFS),最后的层序遍历也叫广度优先遍历(BFS),理解这四种遍历方式的不同,再遇到树相关的算法问题时,也就能更加游刃有余。这

JAVA递归实现线索化二叉树

JAVA递归实现线索化二叉树基础理论首先,二叉树递归遍历分为先序遍历、中序遍历和后序遍历。先序遍历为:根节点左子树右子树中序遍历为:左子树根节点右子树后序遍历为:左子树右子树根节点(只要记住根节点在哪里就是什么遍历,且都是先左再右)线索化现在有这么一棵二叉树,它的数据结

Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)

Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.cnblogs.com%2Fliuyang0%2Fp%2F6271331.html)

PHP数据结构与算法:二叉树

一、定义二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(leftsubtree)和“右子树”(rightsubtree)。二、特性1.在二叉树的第i层上至多有2^(i1)个结点(i0)2.深度为k的二叉树至多有2^k1个结点(k0)3.对于任意一棵二叉树,如果其叶结点数为N0,而

04.重建二叉树 (Java)

题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。(https://www.oschina.net/action/GoToLink?urlht