js递归,二叉树的操作


//递归算法n次幂
function foo(n) { if (n == 1) {
return 1;
} else {
return n * foo(n - 1);
} } //console.log(foo(3));var nodes = {
name: 'root', childs: [
{ name: 'a1' },
{ name: 'a2' },
{ name: 'a3' },
{ name: 'b1' },
{ name: 'b2' },
{
name: 'b3', childs: [
{ name: 'bb1' },
{ name: 'bb2' },
{ name: 'bb3' }
]
}
]
} //递归树形节点
function output(node) { console.log(node.name); if (node.childs && node.childs.length > 0) {
node.childs.forEach(function (el, i) {
//递归
output(el);
});
} }
//output(nodes); //二叉树
var tree = {
value: 100,
left: {
value: 80,
left: {
value: 70
},
right: {
value: 90
}
},
right: {
value: 200,
left: {
value: 180
}, right: {
value: 220
}
}
}
//二叉树遍历(递归算法,容易导致运行栈溢出)
function printTree(tree) { console.log(tree.value) if (tree.left) {
printTree(tree.left);
} if (tree.right) {
printTree(tree.right);
} } //printTree(tree); //二叉树的查找
var count = 0;
function findInTree(tree, v) { count++; if (v > tree.value && tree.right) {
findInTree(tree.right, v)
} else if (v < tree.value && tree.left) {
findInTree(tree.left, v)
} else if(v==tree.value){
console.log('存在该节点,节点值为:',tree.value);
return 0;
}else{
console.log('不存在该节点!');
return -1;
} } //findInTree(tree,70);
//console.log(count);
//二叉树的插入
function insertTree(tree, v) { if (v > tree.value) { if (tree.right) {//如果有子节点继续遍历 insertTree(tree.right, v);
} else {
tree.right = { value: v };
} } else if (v < tree.value) { if (tree.left) {//如果有子节点继续遍历 insertTree(tree.left, v); } else {
tree.left = { value: v };
} } else {
console.log('树中已存在该节点');
}
} //insertTree(tree,505);
//console.log(tree); //二叉树的生成(以一个数组中的任意元素为树的根节点)
var data = [12, 23, 45, 123, 5, 89, 42, 32, 69, 11, 87, 25];
//生成一个随机的索引
var rindex = Math.floor(Math.random() * data.length);
//随机获取data中的一个元素作为二叉树的根元素
var prodTree = { value: data[rindex] }; //使用根元素和数组为参数 创建索引
function createTree(node, data) { data.forEach(function (v) {
//将数组的每个元素插入二叉树中
insertTree(node,v); }); }
createTree(prodTree,data);
//遍历生成的二叉树每个节点的值
printTree(prodTree);

jS生成二叉树,二叉树的遍历,查找以及插入的更多相关文章

  1. 二叉树各种相关操作(建立二叉树、前序、中序、后序、求二叉树的深度、查找二叉树节点,层次遍历二叉树等)(C语言版)

    将二叉树相关的操作集中在一个实例里,有助于理解有关二叉树的相关操作: 1.定义树的结构体: typedef struct TreeNode{ int data; struct TreeNode *le ...

  2. javascript/js实现 排序二叉树数据结构 学习随笔

    二叉树是一种数据结构.其特点是: 1.由一系列节点组成,具有层级结构.每个节点的特性包含有节点值.关系指针.节点之间存在对应关系. 2.树中存在一个没有父节点的节点,叫做根节点.树的末尾存在一系列没有 ...

  3. 算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS

    图的深搜与广搜 复习下二叉树.图的深搜与广搜. 从图的遍历说起.图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search),其 ...

  4. 五三想休息,今天还学习,图解二叉树的层序遍历BFS(广度优先)模板,附面试题题解

    壹 ❀ 引 我在从JS执行栈角度图解递归以及二叉树的前.中.后遍历的底层差异一文中,从一个最基本的数组遍历引出递归,在掌握递归的书写规则后,又从JS执行栈角度解释了二叉树三种深度优先(前序.中序后序) ...

  5. 二叉树后序遍历的非递归算法(C语言)

    首先非常感谢‘hicjiajia’的博文:二叉树后序遍历(非递归) 这篇随笔开启我的博客进程,成为万千程序员中的一员,坚持走到更远! 折磨了我一下午的后序遍历中午得到解决,关键在于标记右子树是否被访问 ...

  6. 剑指offer面试题:输入某二叉树的前序遍历和中序遍历,输出后序遍历

    二叉树的先序,中序,后序如何遍历,不在此多说了.直接看题目描述吧(题目摘自九度oj剑指offer面试题6): 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结 ...

  7. LeetCode102. 二叉树的层次遍历

    102. 二叉树的层次遍历 描述 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 示例 例如,给定二叉树: [3,9,20,null,null,15,7], 3 / ...

  8. 剑指 Offer 37. 序列化二叉树 + 二叉树的层次遍历

    剑指 Offer 37. 序列化二叉树 Offer_37 题目描述 题目解析 本题主要考察的就是二叉树的层次遍历. 层次遍历时可以根据二叉树的特点将空结点也进栈. 反序列化时同样可以根据层次遍历的思路 ...

  9. 二叉树的层序遍历 BFS

    二叉树的层序遍历,或者说是宽度优先便利,是经常考察的内容. 问题一:层序遍历二叉树并输出,直接输出结果即可,输出格式为一行. #include <iostream> #include &l ...

随机推荐

  1. ng-zorro-mobile中遇到的问题

    一.Modal(弹出框)使用上的问题 在官方文档中,Modal是这样使用的: 这里需要注意的一点就是,看到上方代码中只用了Modal的全局方式,所以个人认为下面这段注入初始化的东西是没有用的便去掉: ...

  2. BZOJ 3668: [Noi2014]起床困难综合症

    Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2693 Solved: 1563 [Submit][Status][Discuss] Descript ...

  3. https,http和ssl的关系

    https,http和ssl这三者是什么关系呢? http是超文本传输协议,浏览器利用这一协议就可以访问各种网站了. ssl指Secure Sockets Layer 安全套接层,是一种保证网络数据传 ...

  4. 移动端开发框架Zepto.js

    一.概述 Zepto.js是一个轻量的js库,它与jQuery有类似的API. zepto的设计目的是不到10K的通用库,快速下载,有一个熟悉的api-->精力专注在开发上. 流行起来的原因:轻 ...

  5. python 筛选序列中的元素

    列表生成式 a = [1, 2, 3, 4, -1, -2] b = [i for i in a if a > 0] 如果数据量很大,会产生一个庞大的结果.这时可以用生成器表达式: b = (i ...

  6. Unity IoC Base On MVC

    Unity框架,是一个经典的IoC模式实现方式,其通过config文件配置section,将接口与实现解藕,config中的section配置的container以全名称对应,使得应用程序无需像Nin ...

  7. CodeForces - 1087D

    CodeForces - 1087Dhttps://vjudge.net/problem/2115151/origin2*和/叶子结点的个数 #include<iostream> #inc ...

  8. Junit5的依赖添加及RunWith(SpringJUnit4ClassRunner.class)注解使用

    首先Junit5依赖应该配置为 <dependency> <groupId>org.junit.jupiter</groupId> <artifactId&g ...

  9. linux命令统计文件中某个字符串出现的次数

    1.使用grep linux grep命令在我的随笔linux分类里有过简单的介绍,这里就只简单的介绍下使用grep命令统计某个文件这某个字符串出现的次数,首先介绍grep命令的几个参数,详细参数请自 ...

  10. postfix+自签证书,实现加密传输

    说明:当前在centos 6.x环境下: cd /etc/pki/tls/misc ./CA -newca ..... 生成根证书 openssl req -new -nodes -keyout ma ...