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