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. 模拟+贪心——cf1131E

    超级恶心的题,写了好久,直接倒序模拟做,但是网上有博客好像是直接正序dp做的.. 因为左端点和右端点是永远不会变的,然后情况要考虑全 /* 从后往前插 只要记录左连续,右连续,中间连续 左端点一定是L ...

  2. 莫烦PyTorch学习笔记(六)——批处理

    1.要点 Torch 中提供了一种帮你整理你的数据结构的好东西, 叫做 DataLoader, 我们能用它来包装自己的数据, 进行批训练. 而且批训练可以有很多种途径. 2.DataLoader Da ...

  3. socket工作原理深入分析

    socket原理分析 本篇文章摘自https://www.cnblogs.com/zengzy/p/5107516.html,总结的很好,所以摘过来总结整理一下,如果朋友们还想更加深入的研究网络,推荐 ...

  4. Java学习之二(线程(了解) JVM GC 垃圾回收)

    线程与进程(了解)→JVM→字节码→GC 一.程序 = 算法 + 数据结构(大佬) 二.程序 = 框架 + 业务逻辑(现实) 1.线程与进程.同步与异步 1.1进程是什么? 进程就是操作系统控制的基本 ...

  5. linux 详解

    一.日常使用命令/常用快捷键命令开关机命令        1.shutdown –h now:立刻进行关机 2.shutdown –r now:现在重新启动计算机 3.reboot:现在重新启动计算机 ...

  6. DOS批处理脚本

    先概述一下批处理是个什么东东.批处理的定义,至今我也没能给出一个合适的----众多高手们也都没给出----反正我不知道----看了我也不一定信服----我是个菜鸟,当然就更不用说了:但我想总结出一个“ ...

  7. Activiti 部分实用功能

    helloworld中已经写了关于部署流程图,查询个人任务,完成个人任务部分.现在添加几个新的实用功能 1.判断流程是否完成,代码如下 public void isProcessEnd() { Str ...

  8. springboot-actuator监控的401无权限访问

    在pom.xml里边添加 <dependency> <groupId>org.springframework.boot</groupId> <artifact ...

  9. occ+vtk显示igs模型

    使用Opencascade读取igs文件内模型,使用vtk进行显示. 本案例环境:Opencascade6.6.0 +  vtk-5.10 + VS2005(win32) 使用CMake管理工程. C ...

  10. C开发系列-指针

    指针 通过一段简单的程序,引入指针的概念 #include <iostream> using namespace std; // changeValue函数的定义 void changeV ...