Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 값이 없는 이진 검색 트리 확인

<시간/>

가치 없는 이진 검색 트리

이진 검색 트리는 트리의 모든 노드가 동일한 값을 가질 경우 단일 값입니다.

문제

우리는 BST의 루트를 취하고 주어진 트리가 단일 값인 경우에만 true를 반환하고 그렇지 않으면 false를 반환하는 JavaScript 함수를 작성해야 합니다.

예를 들어, 트리의 노드가 -

인 경우
const input = [5, 5, 5, 3, 5, 6];

그러면 출력은 다음과 같아야 합니다. -

const output = false;

예시

이에 대한 코드는 -

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(5);
BST.insert(5);
BST.insert(5);
BST.insert(3);
BST.insert(5);
BST.insert(6);
const isUnivalued = (root) => {
   const helper = (node, prev) => {
      if (!node) {
         return true
      }
      if (node.data !== prev) {
         return false
      }
      let isLeftValid = true
      let isRightValid = true
      if (node.left) {
         isLeftValid = helper(node.left, prev)
      }
      if (isLeftValid && node.right) {
         isRightValid = helper(node.right, prev)
      }
      return isLeftValid && isRightValid
   }
   if (!root) {
      return true
   }
   return helper(root, root.data)
};
console.log(isUnivalued(BST.root));

출력

콘솔의 출력은 -

false