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);

原文地址:https://www.cnblogs.com/lovellll/p/10208214.html

时间: 2024-10-16 06:31:00

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

数据结构开发(23):二叉树中结点的查找、插入、删除与清除操作

0.目录 1.二叉树中结点的查找操作 2.二叉树中结点的插入操作 3.二叉树中结点的删除操作 4.二叉树中结点的清除操作 5.小结 1.二叉树中结点的查找操作 查找的方式: 基于数据元素值的查找 BTreeNode<T>* find(const T& value) const 基于结点的查找 BTreeNode<T>* find(TreeNode<T>* node) const 树中数据元素和结点的查找: 基于数据元素值的查找: 定义功能:find(node,

二叉树的前序遍历建立与二叉树的前序遍历查找

#include<iostream> #include<vector> using namespace std; //二叉树的定义 struct TreeNode { char val; TreeNode *left; TreeNode *right; TreeNode(int x='#') : val(x), left(NULL), right(NULL) {} }; //建立二叉树 //AB#D##C##前序遍历 void erchashu_jianli(TreeNode**

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

将二叉树相关的操作集中在一个实例里,有助于理解有关二叉树的相关操作: 1.定义树的结构体: 1 typedef struct TreeNode{ 2 int data; 3 struct TreeNode *left; 4 struct TreeNode *right; 5 }TreeNode; 2.创建根节点: 1 TreeNode *creatRoot(){ 2 TreeNode * root =(TreeNode *)malloc(sizeof(TreeNode)); 3 if(NULL=

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

二叉树是一种数据结构.其特点是: 1.由一系列节点组成,具有层级结构.每个节点的特性包含有节点值.关系指针.节点之间存在对应关系. 2.树中存在一个没有父节点的节点,叫做根节点.树的末尾存在一系列没有子节点的节点,称为叶子节点.其他可以叫做中间节点. 3.树的根节点位于第一层,层级数越大,节点位置越深,层级数也叫做树高. 排序二叉树为二叉树的一种类型,其特点是: 1.节点分为左右子树. 2.在不为空的情况下,左子树子节点的值都小于父节点的值. 3.在不为空的情况下,右子树子节点的值都大于父节点的

[数据结构]二叉树创建与遍历

实验报告:二叉树创建与遍历 一.问题描述 二叉树是一种实用范围很广的非线性结构,一棵非空二叉树有也只有一个根结点,每个结点最多有两个子树,我们称为左子树与右子树,当一个结点的左.右子树都是空的时,沃恩称此结点为叶子结点. 二叉树有一些很好的性质,这里不再赘述.考虑如何存储一棵树,本实验选择使用链式存储结构——二叉链表:如果事先知道需要存储的二叉树是满二叉树或者完全二叉树,则可以考虑使用顺序存储,否则将浪费大量的存储空间. 对于一棵既成的二叉树,有三种遍历方式——先序.中序与后序.可以证明,一棵形

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

图的深搜与广搜 马上又要秋招了,赶紧复习下基础知识.这里复习下二叉树.图的深搜与广搜.从图的遍历说起,图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search),其经典应用走迷宫.N皇后.二叉树遍历等.遍历即按某种顺序访问"图"中所有的节点,顺序分为: 深度优先(优先往深处走),用的数据结构是栈, 主要是递归实现: 广度优先(优先走最近的),用的数据结构是队列,主要是迭代实现: 对于深搜,由于递归往往可以方便的利

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

图的深搜与广搜 复习下二叉树.图的深搜与广搜. 从图的遍历说起.图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search),其经典应用走迷宫.N皇后.二叉树遍历等.遍历即按某种顺序訪问"图"中全部的节点,顺序分为: 深度优先(优先往深处走),用的数据结构是栈, 主要是递归实现. 广度优先(优先走近期的).用的数据结构是队列.主要是迭代实现. 对于深搜.因为递归往往能够方便的利用系统栈,不须要自己维护栈.所以通常实

二叉树,添加,查找

public class Tree { TreeNode last = null; TreeNode root = null; public Tree(int value){ root = createNode(value); } //结构 static class TreeNode{ int data; TreeNode left; TreeNode right; } //查找结点 public boolean searchTreeNode(int key,TreeNode tree){ if

已知二叉树的前序遍历结果和中序遍历结果,请重建原来的二叉树

分析的过程: 1.假设前序遍历的第一个值为a,该值就是原二叉树的根节点. 2.在中序遍历结果中查找a. 则在中序遍历中a前面的节点,就是原二叉树a节点左子树的中序遍历结果:在a后面的节点,就是原二叉树a节点右子树的中序遍历结果. 3.由第二步得到a节点左子树的节点个数为m,那么在前序遍历中a后面的m个节点即为a节点左子树的前序遍历结果: 4.由第二步得到a节点右子树的节点个数为n,那么在前序遍历中最后n个节点即为a节点右子树的前序遍历结果: 由此我们可以得到a节点左子树和右子树的前序遍历和中序遍