tnblog
首页
视频
资源
登录

Js 实现二叉树

6270人阅读 2020/6/23 14:22 总访问:3467520 评论:1 收藏:0 手机
分类: 前端

javascript

Js 实现二叉树


定义


二叉树是n(n>=0)个节点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树组成。
下列图展示了一棵普通二叉树:

二叉树

二叉树特点


由二叉树定义以及图示分析得出二叉树有以下特点:
1)每个节点最多有两颗子树,所以二叉树中不存在度大于2的节点。
2)左子树和右子树是有顺序的,次序不能任意颠倒。
3)即使树中某节点只有一棵子树,也要区分它是左子树还是右子树。


简单代码的实现与运用


定义树


tree.js

  1. function Tree(){
  2. this.root=null;
  3. }
  4. //添加根节点
  5. Tree.prototype.addNode = function(val){
  6. var n = new Node(val);
  7. if (this.root == null) {
  8. this.root = n;
  9. }else{
  10. this.root.addNode(n);
  11. }
  12. }
  13. //执行树的遍历函数
  14. Tree.prototype.traverse = function(){
  15. this.root.visit();
  16. }
  17. //查找节点
  18. Tree.prototype.search = function(val){
  19. let SearchOne = this.root.search(val);
  20. return SearchOne;
  21. }

定义节点


node.js

  1. //添加节点
  2. function Node(val) {
  3. this.value = val;
  4. this.left = null;
  5. this.right = null;
  6. }
  7. //遍历节点
  8. Node.prototype.visit = function(){
  9. if (this.left !=null) {
  10. this.left.visit();
  11. }
  12. console.log(this.value);
  13. if (this.right != null) {
  14. this.right.visit();
  15. }
  16. }
  17. //查找节点
  18. Node.prototype.search = function(val){
  19. if(this.value == val){
  20. return this;
  21. }else if(val < this.value && this.left != null){
  22. return this.left.search(val);
  23. }else if(val > this.value && this.right != null){
  24. return this.right.search(val);
  25. }
  26. return null;
  27. }
  28. //添加子节点
  29. Node.prototype.addNode = function(n){
  30. if(n.value < this.value){
  31. if(this.left==null){
  32. this.left=n;
  33. }else{
  34. this.left.addNode(n);
  35. }
  36. }else if(n.value > this.value){
  37. if(this.right==null){
  38. this.right=n;
  39. }else{
  40. this.right.addNode(n);
  41. }
  42. }
  43. }


测试Js的代码


sketch.js

  1. var tree;
  2. function setup() {
  3. tree = new Tree();
  4. for (var i = 0; i < 10; i++) {
  5. tree.addNode(Math.floor(Math.random(0,100)*100));
  6. }
  7. console.log(tree);
  8. tree.traverse();
  9. }

其他


关于二叉树.net扩展

写得不好,大家不要笑哈哈哈哈!
Nuget地址:https://www.nuget.org/packages/AiDaSi_BinaryTree/
项目地址:https://github.com/AiDaShi/GeekTimeLearning/tree/master/BinaryTree


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

小可爱

2019/12/24 16:53:39

[兔子][兔子]小坑小坑

这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术