【js 二叉算法】

1. 创建二叉树节点类

首先需要定义一个节点类,包含节点值、左子节点、右子节点等属性。一个简单的实现如下:

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

2. 创建二叉树

接下来需要创建一个二叉树类,实现二叉树的插入、遍历等操作。其中插入方法需要判断当前节点值和插入值的大小关系,选择向左或向右子树插入。

class BinaryTree {
    
    
  constructor() {
    
    
    this.root = null;
  }
  
  insert(val) {
    
    
    const newNode = new TreeNode(val);
    if (!this.root) {
    
    
      this.root = newNode;
      return;
    }
    let current = this.root;
    while (current) {
    
    
      if (val < current.val) {
    
    
        if (current.left) {
    
    
          current = current.left;
        } else {
    
    
          current.left = newNode;
          break;
        }
      } else {
    
    
        if (current.right) {
    
    
          current = current.right;
        } else {
    
    
          current.right = newNode;
          break;
        }
      }
    }
  }
  
  // 前序遍历
  preOrderTraversal(node = this.root, result = []) {
    
    
    if (node) {
    
    
      result.push(node.val);
      this.preOrderTraversal(node.left, result);
      this.preOrderTraversal(node.right, result);
    }
    return result;
  }
  
  // 中序遍历
  inOrderTraversal(node = this.root, result = []) {
    
    
    if (node) {
    
    
      this.inOrderTraversal(node.left, result);
      result.push(node.val);
      this.inOrderTraversal(node.right, result);
    }
    return result;
  }
  
  // 后序遍历
  postOrderTraversal(node = this.root, result = []) {
    
    
    if (node) {
    
    
      this.postOrderTraversal(node.left, result);
      this.postOrderTraversal(node.right, result);
      result.push(node.val);
    }
    return result;
  }
}

3. 测试代码

最后可以写一些测试代码来验证实现的正确性,例如:

const binaryTree = new BinaryTree();
binaryTree.insert(8);
binaryTree.insert(3);
binaryTree.insert(10);
binaryTree.insert(1);
binaryTree.insert(6);
binaryTree.insert(14);

console.log(binaryTree.preOrderTraversal());  // [8, 3, 1, 6, 10, 14]
console.log(binaryTree.inOrderTraversal());   // [1, 3, 6, 8, 10, 14]
console.log(binaryTree.postOrderTraversal()); // [1, 6, 3, 14, 10, 8]

这里以前序、中序和后序遍历为例进行了测试,结果符合预期。

猜你喜欢

转载自blog.csdn.net/Ge_Daye/article/details/132187717