Q2_CSD
Q2_CSD
//insert by string
public void insert(Person x){
Node p = new Node(x);
if(isEmpty()){root = p; return;}
Node f = null;
Node q = root;
while(q != null){
if(q.info.name.equals(x.name)){
return;
}
else if(q.info.name.compareToIgnoreCase(x.name) > 0){f = q; q =
q.left;}
else{f = q; q = q.right;}
}
if(f.info.name.compareToIgnoreCase(x.name) > 0) f.left = p;
else f.right = p;
}
//insert by integer/double
public void insert(Car x){
Node q=new Node(x);
if(isEmpty())
{root=q;
return;
}
Node f,p;
f=null;p=root;
while(p!=null)
{if(p.info.price == x.price)
{
return;
}
f=p;
if(x.price < p.info.price) p=p.left; else p=p.right;
}
if(x.price< f.info.price) f.left=q; else f.right=q;
}
if (f == null) {
root = p.left; // Nếu p là root, cây con trái của p trở thành root mới
} else if (f.left == p) {
f.left = p.left;
} else {
f.right = p.left;
}
}
}
//xxxxxxxxxxx
Node findNodeWithTwoChildren(Node p) throws Exception {
Queue queue = new Queue();
if (isEmpty()) {
return null;
}
queue.enqueue(root);
while (!queue.isEmpty()) {
Node node = queue.dequeue();
if (node.left != null && node.right != null && node.info.price < 7) {
return node;
} else {
if (node.left != null) {
queue.enqueue((node.left));
}
if (node.right != null) {
queue.enqueue((node.right));
}
}
}
return null;
}
//xxxxxx
Node findNodeWithLeftChildren(Node p) throws Exception {
Queue queue = new Queue();
if (isEmpty()) {
return null;
}
queue.enqueue(root);
while (!queue.isEmpty()) {
Node node = queue.dequeue();
if (node.left != null) {
if (node.info.price < 7) {
return node;
} else {
queue.enqueue((node.left));
}
}
if (node.right != null) {
queue.enqueue((node.right));
}
}
return null;
}
//balance tree
public void balance(ArrayList a, int first, int last){
if(first > last) return;
int m = (first + last) /2;
Person x = ((Node)a.get(m)).info;
insert(x);
balance(a, first, m-1);
balance(a, m+1, last);
}
if (parent == root) {
root = child;
} else {
Node grandparent = father(parent);
if (grandparent.left == parent) {
grandparent.left = child;
} else {
grandparent.right = child;
}
}
}
return current;
}
return current;
}
//get node by string
public Node getNode(String xName) {
Node p = root;
while (p != null) {
int cmp = p.info.getBcode().compareToIgnoreCase(xName);
if (cmp > 0) {
p = p.left;
} else if (cmp < 0) {
p = p.right;
} else {
return p; // node found
}
}
return null; // node not found
}
}
}
//calculate factor
public void calculateBalance(Node p){
if(p == null){
return;
}
MyQueue m = new MyQueue();
m.enqueue(p);
while(!m.isEmpty()){
Node q = (Node)m.dequeue();
if(q.left != null){
m.enqueue(q.left);
}
if(q.right != null){
m.enqueue(q.right);
}
q.bal = height(q.right) - height(q.left);
if(isAVL && q.bal < -1 || q.bal > 1){// De cho thuc hien nhieu
isAVL = false;
}
}
}