由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 哪位大牛能给贴个tri-nary search tree的delete的code?
相关主题
问一个问题: binary search Tree的删除用java实现。遇到了一个很奇怪的C++问题
BST insertionInterview question::
面试的时候 binary tree的delete也要15分钟之内写完么?讨论Amazon的一道题:根节点到叶节点之间最小和,并打印路径
回馈本版,新鲜店面,新题新气象find treenode with two indegrees
热腾腾的 LinkedIn 电面题攒RP如何随机找二叉树中的任意节点?
一道google面试题Leetcode bst max path-----is this solution correct?
请教个G题目狗店面,求BLESS
delete a node in linked list大虾帮忙看看代码,为什么 res参数传入不了,返回总是null
相关话题的讨论汇总
话题: node话题: delete话题: treenode话题: else话题: null
进入JobHunting版参与讨论
1 (共1页)
y*****3
发帖数: 451
1
在网上看到一个,觉得有错误。感觉如果按照他这个做,如果要delete的碰巧是middle
child,而那个middle child又有孩子,结果就不对了。
public TrinaryNode delete(key, node) {
if (node == null) {
throw new RuntimeException();
} else if (key < node.key) {
node.left = delete(key, node.left);
} else if (key > node.key) {
node.right = delete(key, node.right);
} else {
if (node.middle != null) {
node.middle = delete(key, node.middle);
} else if (node.right != null) {
node.key = findMin(node.right).key;
node.right = delete(findMin(node.right).key, node.right);
} else {
node = node.left;
}
}
return node;
}
y*****3
发帖数: 451
2
up
x*********1
发帖数: 23
3
顶一下!
y*****3
发帖数: 451
4
这道题是zillow的筛选assignment两题中的一道,每个candidate都要做的,班上应该
讨论出个标准答案来。
N******t
发帖数: 43
5
贴代码,如有错误,请私信。
/**
* Implement insert and delete in a trinary tree.
*
*/
public class TrinaryTree {
/**
* define a trinary tree's node
*
*/
static class TreeNode{
public int val; // node's value
public TreeNode left, right, mid; // represent left, right, middle
node
public TreeNode(int v){
this.val = v;
left = null;
right = null;
mid = null;
}
}
TreeNode root;

public TrinaryTree(){
root = null;
}

public void insert(int v){
root = insert(root, v);
}

/**
* insert a node into the tree
* @param node
* @param v
* @return
*/
public TreeNode insert(TreeNode node, int v){
if(node == null){
node = new TreeNode(v);
System.out.println("Insert node "+v);
} else {
if(node.val > v){
node.left = insert(node.left,v);
} else if(node.val < v) {
node.right = insert(node.right,v);
} else {
node.mid = insert(node.mid,v);
}
}
return node;
}

public void delete(int v){
root = delete(root,v);
}
/**
* delete a node from the tree, if there are duplicates, delete the
lowest one
* @param node
* @param v
* @return
*/
public TreeNode delete(TreeNode node, int v){
//can't find the node, return
if(node == null){
System.out.println("Can not find node "+v);
return null;
} else if(node.val > v){
node.left = delete(node.left,v);
} else if(node.val < v){
node.right = delete(node.right,v);
} else {
if(node.mid != null){
node.mid = delete(node.mid,v);
} else if(node.right != null){
node.val = findMin(node.right);
node.right = delete(node.right,node.val);
} else {
System.out.println("Delete node "+node.val);
node = node.left;
}
}
return node;
}

/**
* find the leftmost(minimum) node and delete it
* @param node
* @return
*/
public int findMin(TreeNode node){
if(node.left == null){
int v = node.val;
return v;
} else {
return findMin(node.left);
}
}

public static void main(String[]args){
TrinaryTree tree = new TrinaryTree();
int[] num = {5,4,9,5,7,2,2};
for(int i = 0; i < num.length; i++){
tree.insert(num[i]);
}

//delete a node doesn't exist
tree.delete(1);

//delete one of duplicates
tree.delete(5);
tree.delete(2);
//delete the node has both children
tree.delete(5);
//delete the node only has left child
tree.delete(4);
//delete leaf node
tree.delete(2);
tree.delete(9);
//delete single node
tree.delete(7);

//delete a node from an empty tree
tree.delete(2);
}
}
1 (共1页)
进入JobHunting版参与讨论
相关主题
大虾帮忙看看代码,为什么 res参数传入不了,返回总是null热腾腾的 LinkedIn 电面题攒RP
问题在哪儿啊 kth Node of BST,大家帮忙一道google面试题
今天面的太惨了....请教个G题目
yelp 电面面经应该已跪了delete a node in linked list
问一个问题: binary search Tree的删除用java实现。遇到了一个很奇怪的C++问题
BST insertionInterview question::
面试的时候 binary tree的delete也要15分钟之内写完么?讨论Amazon的一道题:根节点到叶节点之间最小和,并打印路径
回馈本版,新鲜店面,新题新气象find treenode with two indegrees
相关话题的讨论汇总
话题: node话题: delete话题: treenode话题: else话题: null