Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Đảo ngược cây nhị phân (Invert Binary Tree) trong JavaScript

Cho cây nhị phân:

    4 
   / \ 
  2   7 
 / \ / \ 
1  3 6  9

Viết hàm nhận root và đảo ngược cây (hoán đổi left/right ở mọi node).

Kết quả:

    4 
   / \ 
  7   2 
 / \ / \ 
9  6 3  1

Ví dụ

class Node{ 
  constructor(val){ 
    this.val = val; 
    this.left = null; 
    this.right = null; 
  }; 
}; 
class BinaryTree{ 
  constructor(){ this.root = null; }; 
  insert = (data) => { 
    const newNode = new Node(data); 
    if(this.root === null){ this.root = newNode; } 
    else { this.insertData(this.root, newNode); }; 
  }; 
  insertData = (node, newNode) => { 
    if(newNode.val < node.val){ 
      if(node.left === null) node.left = newNode; 
      else this.insertData(node.left, newNode); 
    } else { 
      if(node.right === null) node.right = newNode; 
      else this.insertData(node.right, newNode); 
    } 
  }; 
  invert = (node) => { 
    if(node === null) return; 
    [node.left, node.right] = [node.right, node.left]; 
    this.invert(node.right); 
    this.invert(node.left); 
  }; 
  traverse = (node) => { 
    if(node === null) return; 
    this.traverse(node.right); 
    console.log(node.val); 
    this.traverse(node.left); 
  }; 
}; 
const Tree = new BinaryTree(); 
Tree.insert(2); Tree.insert(7); Tree.insert(4); 
Tree.insert(1); Tree.insert(9); Tree.insert(3); Tree.insert(6); 
Tree.traverse(Tree.root); 
Tree.invert(Tree.root); 
console.log('after inversion'); 
Tree.traverse(Tree.root);

Kết quả

Kết quả in ra console (duyệt right-root-left):

9 7 6 4 3 2 1 
after inversion 
1 2 3 4 6 7 9