您的位置:首页 > 理论基础 > 数据结构算法

数据结构 - 树

BradyCC 2019-06-15 09:54 141 查看 https://blog.csdn.net/bradycc/

数据结构 - 树。

// 树实现
// ES5
var Tree = function() {
var root = null;

// 辅助类
var Node = function(value) {
this.value = value;
this.left = null;
this.right = null;
};

// 插入节点
var insertNode = function(node, newNode) {
// 节点比较
if (newNode.value > node.value) {
// 往右走
if (node.right == null) {
node.right = newNode;
} else {
insertNode(node.right, newNode);
}
} else if (newNode.value < node.value) {
// 往左走
if (node.left == null) {
node.left = newNode;
} else {
insertNode(node.left, newNode);
}
}
};
this.insert = function(value) {
// 新的节点
var newNode = new Node(value);

// 检查是否为空树
if (root == null) {
root = newNode;
} else {
insertNode(root, newNode);
}
};

// 遍历节点
var traverse = function(node, callback) {
// 检查节点是否为空
if (node != null) {
// callback(node.value); // 8,2,3,9
traverse(node.left, callback);
// callback(node.value); // 2,3,8,9
traverse(node.right, callback);
// callback(node.value);  // 3,2,9,8
}
};
this.traverse = function(callback) {
traverse(root, callback);
};

// 移除节点
var findMinNode = function(node) {
if (node == null) return null;
while(node && node.left) {
return node.left;
}
return node;
};
var removeNode = function(node, value) {
if (node == null) return null;
if (value > node.value) {
// 向右查找
node.right = removeNode(node.right, value);
return node;
} else if (value < node.value) {
// 向左查找
node.left = removeNode(node.left, value);
return node;
} else {
// 无子节点
if (node.left == null && node.right == null) {
node = null;
return node;
}

// 只有一个子节点
if (node.left == null && node.right) {
return node.right;
}
if (node.left && node.right == null) {
return node.left;
}

// 有两个子节点
var aux = findMinNode(node);  // 获取最小节点
node.value = aux.value;
node.right = removeNode(node.right, aux.value);
return node;
}
};
this.remove = function(value) {
root = removeNode(root, value);
};

// 获取根节点
this.getRoot = function() {
return root;
};
};

var t = new Tree();
t.insert(11);
t.insert(8);
t.insert(4);
t.insert(9);
t.insert(3);
t.insert(5);

t.remove(4);

var result = function(value) {
console.log(`value - ${value}`);
};
t.traverse(result);
标签: