博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树的创建及遍历(JavaScript实现)
阅读量:6577 次
发布时间:2019-06-24

本文共 1527 字,大约阅读时间需要 5 分钟。

二叉树是常见的数据结构之一,当然也是程序猿必须得熟悉的数据结构之一。大一时我用过C++C语言实现过它,那最近都在用javascript,索性就写一下javascript版本的二叉树,相信不会太难。

创建二叉树

一些常见的二叉树

学过二叉树的都应该知道,一棵二叉树最多只能有两个分支结点,当然也能没有结点。下图是常见的二叉树的形式:

图一只有一个根结点,而图2和图5除叶子节点外都有两个节点,图3和图4则是比较极端的情况,只有左子树/右子树,网上很多人都把它叫做
退化成为线性表

实现代码

通常二叉树都是用的形式来创建的,虽然javscript现在也有了,但是为了熟悉一下原型,这里还是用原型来模拟的行为。以下是实现的代码:

function Node(){    this.data = null    this.leftChild = null    this.rightChild = null}function binaryTree(){    this.root = null}复制代码

可以看到这里定义了两个类,一个是Node类,另一个是binaryTree类。其中一个结点含有数据域,和它的左指针以及右指针,而一颗树则含有结点包含的一切属性,以及一个根节点。这里可以看做树是结点的子类,下面则利用原型来实现它们之间的继承关系:

binaryTree.prototype = {    constructor: Node,    insertNode: function(data){        if(this.root === null){            this.root = {}            this.root.data = data        }else{            insertNode(this.root, data)        }    }}//插入结点,这里构造的是一颗二叉搜索树function insertNode(node,data){    if(node.data < data){        if(node.leftChild === null){            node.leftChild = { data }        }else{            insertNode(node.leftChild, data)        }    }else{        if(node.rightChild === null){            node.rightChild = { data }        }else{            insertNode(node.rightChild, data)        }    }}复制代码

遍历二叉树

常见的二叉树遍历方式有:前序遍历后序遍历中序遍历以及层次遍历,这些遍历方式可以用递归来实现,当然用队列或者来实现也是可以的,但是递归还是要来得简洁一些,代码如下:

binaryTree.prototype = {    constructor: Node,    ...    travelTree: function(root){
//前序遍历 console.log(root.data) this.travelTree(root.leftChild) this.travelTree(root.rightChild) }}复制代码

以上就是javascript实现的二叉树的创建和遍历,完整的代码请

转载地址:http://apfno.baihongyu.com/

你可能感兴趣的文章
说借钱
查看>>
微软URLRewriter.dll的url重写的简单使用(实现伪静态)
查看>>
基于XMPP实现的Openfire的配置安装+Android客户端的实现
查看>>
提高编程技能最有效的方法(转载)
查看>>
leetcode -- Combination Sum II
查看>>
mina高并发短连接导致java.io.IOException: Too many open files解决方案
查看>>
mount nfs 经常出错信息总结(转)
查看>>
[ubuntu] ubuntu13.04安装rabbitcvs管理svn
查看>>
递归的理解
查看>>
【驱动笔记10】再谈IRP
查看>>
HDUOJ----(1031)Design T-Shirt
查看>>
vector中的find
查看>>
〖Windows〗zigbee实验之cygwin编译tinyos.jar编译出错的解决方法
查看>>
1z0-052 q209_7
查看>>
[leetcode]Binary Tree Level Order Traversal II @ Python
查看>>
jQuery之自定义datagrid控件
查看>>
标题栏显示进度条
查看>>
Oracle 11g 的bug?: aix 上,expdp 11.2.0.1 导出,impdp 11.2.0.3 导入,Interval 分区的 【Interval】 分区属性成了【N】...
查看>>
[cocos2dx]怎样将Android手机游戏移植到电视?
查看>>
sencha touch 常见问题解答(26-50)
查看>>