Computer >> Máy Tính >  >> Lập trình >> Javascript

Tìm sự khác biệt tuyệt đối tối thiểu trong Cây tìm kiếm nhị phân trong JavaScript

Chúng tôi được yêu cầu viết một hàm JavaScript lấy trong thư mục gốc của một BST chứa một số dữ liệu số như thế này -

1
\
3
/
2

Hàm phải trả về sự khác biệt tuyệt đối nhỏ nhất giữa hai nút bất kỳ của cây.

Ví dụ -

Đối với cây trên, đầu ra phải là -

const output = 1;

vì | 1 - 2 | =| 3 - 2 | =1

Ví dụ

Mã cho điều này sẽ là -

class Node{
   constructor(data) {
      this.data = data;
      this.left = null;
      this.right = null;
   };
};
class BinarySearchTree{
   constructor(){
      // root of a binary seach tree
      this.root = null;
   }
   insert(data){
      var newNode = new Node(data);
      if(this.root === null){
         this.root = newNode;
      }else{
         this.insertNode(this.root, newNode);
      };
   };
   insertNode(node, newNode){
      if(newNode.data < node.data){
         if(node.left === null){
            node.left = newNode;
         }else{
            this.insertNode(node.left, newNode);
         };
      } else {
         if(node.right === null){
            node.right = newNode;
         }else{
            this.insertNode(node.right,newNode);
         };
      };
   };
};
const BST = new BinarySearchTree();
BST.insert(1);
BST.insert(3);
BST.insert(2);
const getMinimumDifference = function(root) {
   const nodes = [];
   const dfs = (root) => {
      if(root) {
         dfs(root.left);
         nodes.push(root.data);
         dfs(root.right);
      };
   };
   dfs(root);
   let result = nodes[1] - nodes[0];
   for(let i = 1; i < nodes.length - 1; i++) {
      result = Math.min(result, nodes[i + 1] - nodes[i]);
   };
   return result;
};
console.log(getMinimumDifference(BST.root));

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

1