二叉树的创建,插入,查找和比较

二叉树的结构

function TreeNode(){
    this.val = val;
    this.left = null;
    this.right = null;
}

二叉树的创建

function createBTree(aVal,fPredicate,pos){
    var node = {};
    pos = pos || 0;
    if(fPredicate(aVal,pos) || !aVal[pos]){
        return null;
    }
    else{
        node.val = aVal[pos];
        node.left = createBTree(aVal,fPredicate,2*pos+1);
        node.right = createBTree(aVal,fPredicate,2*pos+2);
    }
    return node;
}

二叉树的插入节点

function BTreeInsert(root,val,direction,node){
    if(root == null){
        return false;
    }
    if(root.val === val){
        switch(direction){
            case ‘left‘:
                if(root.left){
                    //throw new Error(‘left node already exists‘);
                    return false;
                }
                else{
                    root.left = node;
                }
                break;
            case ‘right‘:
                if(root.right){
                    //throw new Error(‘right node already exists‘);
                    return false;
                }
                else{
                    root.right = node;
                }
                break;
        }
    }
    else{
        BTreeInsert(root.left,node,val,direction);
        BTreeInsert(root.right,node,val,direction);
    }
    return true;
}

二叉树的查找节点

function DLRFind(root, val) {
    if (root == null) {
        return null;
    }
    if (root.val === val) {
        return root;
    }
    return DLRFind(root.left, val) || DLRFind(root.right, val);
}

二叉树的比较

function BTreeCompare(root1,root2){
    if(root1 == null && root2 == null){
        return true;
    }
    else if(root1 != null && root2 != null){
        return BTreeCompare(root1.left,root2.left)
            && BTreeCompare(root1.right,root2.right);
    }
    else{
        return false;
    }
}

清空二叉树

function BTreeClear(root){
    if(root == null){
        return true;
    }
    BTreeClear(root.left);
    BTreeClear(root.right);
    root = null;
    return true;
}

测试代码

var root = createBTree([3, 2, 4, 6, 7, 8, 1, 0], function (aVal, pos) {
    return aVal[pos] == 0 || pos > 8
}, 0);
DLR(root);//output 3 2 6 7 4 8 1
DLRFind(root,2);//output node 2
DLRFind(root,11);//output null

function createBTree(aVal, fPredicate, pos) {
    var node = {};
    pos = pos || 0;
    if (fPredicate(aVal, pos) || !aVal[pos]) {
        return null;
    } else {
        node.val = aVal[pos];
        node.left = createBTree(aVal, fPredicate, 2 * pos + 1);
        node.right = createBTree(aVal, fPredicate, 2 * pos + 2);
    }
    return node;
}

function DLR(root) {
    if (root == null) {
        return null;
    }
    else {
        console.log(‘d ‘ + root.val);
        DLR(root.left);
        DLR(root.right);
    }
}

function DLRFind(root, val) {
    if (root == null) {
        return null;
    }
    if (root.val === val) {
        return root;
    }
    return DLRFind(root.left, val) || DLRFind(root.right, val);
}
时间: 2024-10-25 15:38:26

二叉树的创建,插入,查找和比较的相关文章

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

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

二叉排序树(BST):创建、查找、插入与删除

删除结点的相关操作(左右子树均为非空的删除结点的方法): 算法分析: 下面以实例来说明二叉排序树的创建.查找.插入和删除等相关操作: 如输入关键字序列(45,24,37,12,54,93),然后对其进行相应的操作,程序如下: #include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; typedef struct BiTNode { int value; struct B

【数据结构之二叉树】二叉树的创建、遍历等操作

二叉树的基本操作: 1.创建二叉树 2.销毁二叉树 3.遍历二叉树:1)前序遍历 2)中序遍历 3)后序遍历 4)层次遍历 4.搜索二叉树 5.删除子叶 6.插入子叶 7.获取左/右子叶的值 8.获取树深度 9.获取叶子结点数 1.创建二叉树 这里创建的是链式存储结构的二叉树,包含数据域,左右两结点的指针域:在读取创建树时,以#代替空格,输入格式的规范为:以前序遍历的顺序输入,如果该结点的左子叶为空,则输入#,以此类推: e.g: -  +         \ a    *    e    f 

数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树

[本文谢绝转载,原文来自http://990487026.blog.51cto.com] 树 数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树 二叉树的创建,关系建立 二叉树的创建,关系建立2 三叉链表法 双亲链表: 二叉树的遍历 遍历的分析PPT 计算二叉树中叶子节点的数目:使用全局变量计数器 计算二叉树中叶子节点的数目:不使用全局变量计数器 无论是先序遍历,中序遍历,后序遍历,求叶子的数字都不变;因为本质都是一样的,任何一个节点都会遍历3趟 求二叉树的高度 二叉树的拷

DOM操作 ——如何添加、移除、移动、复制、创建和查找节点等。

DOM操作 --如何添加.移除.移动.复制.创建和查找节点等. (1)创建新节点 createDocumentFragment() //创建一个DOM片段 createElement() //创建一个具体的元素 createTextNode() //创建一个文本节点 (2)添加.移除.替换.插入 (1)创建新节点 createDocumentFragment()    //创建一个DOM片段 createElement()   //创建一个具体的元素 createTextNode()   //创

JavaScript之jQuery-3 jQuery操作DOM(查询、样式操作、遍历节点、创建插入删除、替换、复制)

一.jQuery操作DOM - 查询 html操作 - html(): 读取或修改节点的HTML内容,类似于JavaScript中的innerHTML属性 文本操作 - text(): 读取或修改节点的文本内容,类似于JavaScript中的textContent属性 值操作 - val(): 读取或修改节点的value属性值,类似于 JavaScript 中的value值 属性操作 - attr(): 读取或者修改节点的属性 - removeAttr(): 删除节点的属性 二.jQuery操作

二叉树的创建和相关算法

二叉树是一种非常重要的数据结构,它是分支结构的基础,今天本人将写一篇博客来叙述一下其相关的算法以及二叉树的创建过程! 1:二叉树的创建: 主要有 先序,中序,后序,层序创建几种方式,其中前三种建立在二叉树遍历方式的基础上的. (1):先序创建 先序创建就是先创建根节点,随后依次创建其左子树和右子树,我们可以采用递归的方法来实现,因为二叉树本身就是建立在递归算法的基础上的. (2):中序和后序创建: 明白了前序创建二叉树的方式,中序和后续我们也可以类比出来,所谓前中后序,就是创建根节点的顺序而已.

DOM怎样添加、移除、移动、复制、创建和查找节点

DOM怎样添加.移除.移动.复制.创建和查找节点// 创建新节点 createDocumentFragment() //创建一个DOM片段 createElement() //创建一个具体的元素 createTextNode() //创建一个文本节点 // 添加.移除.替换.插入 appendChild() removeChild() replaceChild() insertBefore() //在已有的子节点前插入一个新的子节点 // 查找 getElementsByTagName() //

c/c++二叉树的创建与遍历(非递归遍历左右中,破坏树结构)

二叉树的创建与遍历(非递归遍历左右中,破坏树结构) 创建 二叉树的递归3种遍历方式: 1,先中心,再左树,再右树 2,先左树,再中心,再右树 3,先左树,再右树,再中心 二叉树的非递归4种遍历方式: 1,先中心,再左树,再右树 2,先左树,再中心,再右树 3,先左树,再右树,再中心 4,层级遍历 二叉树的查找,求高度,求个数,求父节点,复制二叉树,释放二叉树 编译方法,用gcc编译不过去,用g++编译,命令如下: g++ -g nodestack.c nodequeue.c bintree.c