[英]Deserialize Binary Search Tree in JavaScript
輸入是具有空值的預序列化BST。 這些值已讀入具有整數和空值的數組。
樣本輸入
[ 6, 3, null, null, 8, null, 9, null, null ]
想要的輸出
{ _root:
{ value: 6,
left: { value: 3,
left: null,
right: null },
right: { value: 8,
left: null,
right: { value: 9,
left: null,
right: null } } } }
這是BST的基本界面:
function BinarySearchTree() {
this._root = null;
}
BinarySearchTree.prototype = {
//restore constructor
constructor: BinarySearchTree,
insert: function(value) {
//create a new item object, place data in
var node = {
value: value,
left: null,
right: null
},
current;
// more code (works, but omitted for this question)
}
};
我們如何反序列化上面的輸入,以便最終得到BinarySearchTree? 這是沿着這些路線的遞歸預訂遍歷嗎?
function deserialize(arr) {
var result = new BinarySearchTree();
result._root = arr[0];
if (arr[1] === null) {
result._root.left = null;
}
if () {
return null;
}
node.left = deserialize(arr);
node.right = deserialize(arr);
return result;
}
因此,我假設輸入結構將是節點1,左子節點1,左孫子節點1,...右子節點1,右孫子節點1,...
我們可以維護一個堆棧來構建樹,這有助於輕松檢索更高級別的樹(或者我們可以向每個節點的父級添加指針)。
Java代碼:
void builTree(Integer input){
Node root = new Node(input[0]);
Node cur = root;
for(int i = 1; i < input.length; i++){
if(cur.count <=1){
cur = update(cur,input[i]);
}else{
while(cur.count == 2){//This while loop may not necessary
cur = cur.parent;
}
cur = update(cur, s, input[i]);
}
}
}
Node update(Node node, Integer input){
if(node.count == 0){
node.left = new Node(input);
node.left.parent = node;
node.count++;
if(input != null){
return node.left;
}
}else if(node.count == 1){
node.right = new Node(input);
node.right.parent = node;
node.count++;
if(input != null){
return node.right;
}
}
return node;
}
class Node{
int value , count;//variable count will tell whether a node is full or not
Node left, right, parent;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.