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 ...
随机推荐
- 利用eclipse通过mybatis进行查询汉字字符时候无法显示结果,但是直接通过cmd窗口可以显示的解决方法
将数据库配置文件中的url写成如下的形式就可以成功查询: url = "jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&quo ...
- docker 安装 ElasticSearch
docker pull docker.elastic.co/elasticsearch/elasticsearch:5.6.9 docker images docker run -e ES_JAVA_ ...
- IOS 检测摇晃 几个问题
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://kyoworkios.blog.51cto.com/878347/1152692 ...
- 详解Python编程中基本的数学计算使用
详解Python编程中基本的数学计算使用 在Python中,对数的规定比较简单,基本在小学数学水平即可理解. 那么,做为零基础学习这,也就从计算小学数学题目开始吧.因为从这里开始,数学的基础知识列位肯 ...
- vue 五星评价插件
html: <div class="starBox" ref="star1"> <div class="star" v-f ...
- java基础之BigInteger
BigInteger类概述可以让超过Integer范围内的数据进行运算 构造方法 public BigInteger(String val) 成员方法: public BigInteger add(B ...
- springMVC dubbo注解无效,service层返回空指针
出现空指针的原因是:spring mvc扫描的时候根本无法识别@Reference ,同一方面,dubbo的扫描也无法识别Spring @Controller ,所以两个扫描的顺序要排列好, 如果先 ...
- Elasticsearch & Kibana with Shield
Elasticsearch & Kibana with Shield 官方网站: https://www.elastic.co/guide/en/kibana/current/produc ...
- Luogu P3007 [USACO11JAN]大陆议会The Continental Cowngress
P3007 [USACO11JAN]大陆议会The Continental Cowngress 题意 题意翻译 简述:给出\(n\)个法案,\(m\)头牛的意见,每头牛有两个表决格式为"支持 ...
- Windows API 第六篇 GetLocalTime
GetLocalTime获取系统时间信息.函数原型:VOID WINAPI GetLocalTime( __out LPSYSTEMTIME lpSystemTime ); 先来看S ...