jS生成二叉树,二叉树的遍历,查找以及插入
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生成二叉树,二叉树的遍历,查找以及插入的更多相关文章
- 二叉树各种相关操作(建立二叉树、前序、中序、后序、求二叉树的深度、查找二叉树节点,层次遍历二叉树等)(C语言版)
将二叉树相关的操作集中在一个实例里,有助于理解有关二叉树的相关操作: 1.定义树的结构体: typedef struct TreeNode{ int data; struct TreeNode *le ...
- javascript/js实现 排序二叉树数据结构 学习随笔
二叉树是一种数据结构.其特点是: 1.由一系列节点组成,具有层级结构.每个节点的特性包含有节点值.关系指针.节点之间存在对应关系. 2.树中存在一个没有父节点的节点,叫做根节点.树的末尾存在一系列没有 ...
- 算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS
图的深搜与广搜 复习下二叉树.图的深搜与广搜. 从图的遍历说起.图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search),其 ...
- 五三想休息,今天还学习,图解二叉树的层序遍历BFS(广度优先)模板,附面试题题解
壹 ❀ 引 我在从JS执行栈角度图解递归以及二叉树的前.中.后遍历的底层差异一文中,从一个最基本的数组遍历引出递归,在掌握递归的书写规则后,又从JS执行栈角度解释了二叉树三种深度优先(前序.中序后序) ...
- 二叉树后序遍历的非递归算法(C语言)
首先非常感谢‘hicjiajia’的博文:二叉树后序遍历(非递归) 这篇随笔开启我的博客进程,成为万千程序员中的一员,坚持走到更远! 折磨了我一下午的后序遍历中午得到解决,关键在于标记右子树是否被访问 ...
- 剑指offer面试题:输入某二叉树的前序遍历和中序遍历,输出后序遍历
二叉树的先序,中序,后序如何遍历,不在此多说了.直接看题目描述吧(题目摘自九度oj剑指offer面试题6): 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结 ...
- LeetCode102. 二叉树的层次遍历
102. 二叉树的层次遍历 描述 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 示例 例如,给定二叉树: [3,9,20,null,null,15,7], 3 / ...
- 剑指 Offer 37. 序列化二叉树 + 二叉树的层次遍历
剑指 Offer 37. 序列化二叉树 Offer_37 题目描述 题目解析 本题主要考察的就是二叉树的层次遍历. 层次遍历时可以根据二叉树的特点将空结点也进栈. 反序列化时同样可以根据层次遍历的思路 ...
- 二叉树的层序遍历 BFS
二叉树的层序遍历,或者说是宽度优先便利,是经常考察的内容. 问题一:层序遍历二叉树并输出,直接输出结果即可,输出格式为一行. #include <iostream> #include &l ...
随机推荐
- System.Web.Mvc.PartialViewResult.cs
ylbtech-System.Web.Mvc.PartialViewResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, ...
- OpenCASCADE 7.4.0 Released
Open Cascade is pleased to announce a new public release of Open CASCADE Technology (version 7.4.0). ...
- 报错C1189 #error: "No Target Architecture"
根本原因: 是因为单独包含了一些windows.h已经包含了的头文件如"fileapi.h","WinUser.h",但是却没有包含windows.h 或者先包 ...
- poi 3669 meteor shower (bfs)
题目链接:http://poj.org/problem?id=3669 很基础的一道bfs的题,然而,我却mle了好多次,并且第二天才发现错在了哪里_(:з)∠)_ 写bfs或者dfs一定要记得对走过 ...
- SpringBoot 05_集成SpringDataJpa
你还在为项目的集成头疼吗?你还在为管理大量的配置文件烦恼吗?如果是,用SpringBoot吧!今天主要介绍如果在SpringBoot的基础上创建一个集成了SpringDataJpa的项目,至于Spri ...
- Js中获取时间 new date()的用法
Js中获取时间 new date()的用法 获取时间: var myDate = new Date();//获取系统当前时间 myDate.getYear(); //获取当前年份(2位) myDate ...
- Codeigniter 数据库操作事务情况下获取不到last_insert_id()
开发中,数据库Insert使用了事务,如果 $this->db->insert_id() 放在 $this->db->trans_complete(); 这句语句之后,$thi ...
- 廖雪峰Java10加密与安全-3摘要算法-4BouncyCastle
1.BouncyCastle: 第三方提供的一组加密/哈希算法 提供JDK没有提供的算法 RipeMD160哈希算法 官方网站 2.如何使用第三方提供的算法 2.1 添加第三方jar至classpat ...
- java虚拟机(十)--性能监控工具测试内存溢出和死锁基本思路
在之前就曾经简单介绍过jdk自带的性能检测工具,但是只是很入门的内容.没有真正的用过都是白扯了,面试的时候也说不过去,更别提真正 在生产环境去解决问题,所以这里我们学习一下真正解决问题的过程,最起码面 ...
- PHP--通用化API接口数据输出 封装
/** * 通用化API接口数据输出 * author qinpeizhou * @param $message * @param array $data * @param int $httpCode ...