二叉树基本算法的总结

二叉树的构建

  • 树的构造函数后面就直接简写(主要是针对数组中树的擦欧哦中)

一、 普通二叉树

  • 思路: 可以利用层次遍历建立
// 利用层次遍历构造普通二叉树
  function createTree(arr) {
      const bt = new TreeNode(arr.shift());
      let queue = [];
      queue.push(bt);
      while (arr.length) { //当数组中还有元素的时候
          let cur = queue.shift();
          cur.left = new TreeNode(arr.shift());
          cur.right = new TreeNode(arr.shift());
          cur.left && queue.push(cur.left);
          cur.right && queue.push(cur.right);
      }
      return bt;
  }
 let arr = [1, 2, 3, 4, 5];
 console.log(createTree(arr));

二 、完全二叉树

  • 思路:完全二叉树(下标的关系),利用先序遍历实现
// 树的构造函数
    function TreeNode(data) {
        this.data = data;
        this.left = this.right = null;
    }
  // 递归实现完全二叉树的构造
   function create(arr, i) {
         if (i > arr.length - 1) {
             return;
         }
         let t = new TreeNode(arr[i]);
         t.left = create(arr, 2 * i + 1);
         t.right = create(arr, 2 * i + 2);
         return t;
     }

     let arr = [1, 2, 3, 4, 5, 6];
     console.log(create(arr, 0));

三、 二叉搜索树

  • 先序遍历,对输入数据与新的根节点比较(注意b,p两个指针配合查找!!!)
    // 先序遍历创建二叉排序树
        function BinarySortTree(arr) {
            const bst = new TreeNode(arr.shift());
            while(arr.length) {
                let cur = new TreeNode(arr.shift());
                let base = bst; //base为遍历,查找, b 和 p配合
                let parent;
                while(true) {
                    parent = base;
                    if(cur.data < base.data) {
                        base = base.left;
                        if(!base) {
                            parent.left = cur;
                            break;
                        }
                    } else {
                        base = base.right;
                        if(!base) {
                            parent.right = cur;
                            break;
                        }
                    }
                }
            }
            return bst;
        }


        let arr = [5, 2, 4, 7, 6];
        console.log(BinarySortTree(arr));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值