protected bool DeleteNode(TreeAA tree, int keyDelete) { NodeAA node = SearchNode(tree.root, keyDelete); if (node == null) { return(false); } else { if (node.left == null && node.right == null) { //xoa node la DeleteLeaf(tree, keyDelete); while (!CheckBalance(tree.root, keyDelete)) { Console.WriteLine("root: {0}", tree.root.data); } return(true); } else { int numberTest = DeleteBough(tree, node); while (!CheckBalance(tree.root, numberTest)) { Console.WriteLine("root: {0}", tree.root.data); } //xoa node co 2 con return(true); } } }
protected void DeleteLeaf(TreeAA tree, int keyDelete) { NodeAA nodeParent = SearchParent(tree.root, keyDelete); if (nodeParent != null) { if (keyDelete < nodeParent.data) { nodeParent.left = null; nodeParent.level--; if (nodeParent.right.level > nodeParent.level) { nodeParent.right.level--; } } else { nodeParent.right = null; nodeParent.level = 1; } } else { if (tree.root.data == keyDelete) { tree.root = null; } } }
protected int DeleteBough(TreeAA tree, NodeAA node) { NodeAA leftBestChild = FindLeftBestChild(node.left); NodeAA parentLBC = SearchParent(node, leftBestChild.data); Console.WriteLine("parent:{0}", parentLBC.data); node.data = leftBestChild.data; if (node.data == parentLBC.data) { parentLBC.left = null; } else { parentLBC.right = null; } parentLBC.level = 1; if (parentLBC.left != null) { parentLBC.left.level = 1; } else { parentLBC.right.level = 1; } return(parentLBC.data); }
protected bool InsertTree(TreeAA tree, int newData) { return(InsertNode(tree.root, newData)); }