01/10/2018, 00:59

Ai giải thích hộ em tại sao nó không vào điều kiện if Trong hàm Push được k!

đây là đoạn code của em.

#include<stdio.h>
#include<conio.h>
#include<iostream>

typedef struct Node {
	int data;
	struct Node *pleft;
	struct Node *pright;
} NODE;

typedef struct Stack {
	NODE *top;
} STACK;

typedef NODE* Tree;

void khoitao(STACK &stack, Tree &tree) {
	stack.top = NULL;
	tree = NULL;
}

NODE* getNode(int &x) {
	NODE* p = new NODE;
	if (p == NULL) {
		return NULL;
	}
	else {
		p->data = x;
		p->pleft = NULL;
		p->pright = NULL;
		return p;
	}
}

int isEmpty(STACK &stack) {
	return stack.top == NULL;
}

int isEmptyTree(Tree &tree) {
	return tree == NULL;
}

void Push(STACK &stack, NODE *p) {
	if (isEmpty(stack)) {
		stack.top = p;
	}
	else {
		p->pright = stack.top;
		stack.top->pleft = p->pleft;
		stack.top = p;
	}
}

void Pop(STACK &stack) {
	int x;
	if (isEmpty(stack)) {
		return;
	}
	else {
		NODE* p = stack.top;
		x = p->data;
		printf("%d ", x);
		stack.top = p->pright;
		delete p;
	}
}

void addTree(Tree &tree, int &x) {
	NODE* p = getNode(x);
	if (isEmptyTree(tree)) {
		NODE* p = getNode(x);
		tree = p;
	}
	else {
		if (tree->data > x) {
			addTree(tree->pleft, x);
		}
		else if (tree->data < x) {
			addTree(tree->pright, x);
		}
	}
}

void DuyetCayDeQuy(Tree &tree) {
	if (isEmptyTree(tree)) {
		return;
	}
	else {
		printf("%d ", tree->data);
		DuyetCayDeQuy(tree->pleft);
		DuyetCayDeQuy(tree->pright);
	}
}

void DuyetCayKhongDeQuy(Tree &tree) {
	STACK stack;
	NODE *p;

	Push(stack, tree);
	while (!isEmpty(stack)) {
		p = stack.top;
		Pop(stack);
		if (p->pright != NULL) {
			Push(stack, p->pright);
		}
		if (p->pleft != NULL) {
			Push(stack, p->pleft);
		}
	}
}


/*
void Nhap(STACK &stack){
NODE* p;
int x;
for(int i = 0 ; i < 5; i++){
scanf("%d",&x);
p = getNode(x);
Push(stack,p);
}
while(!isEmpty(stack)){
Pop(stack);
}
}
*/

int main() {
	Tree tree;
	Stack stack;
	khoitao(stack, tree);

	int luachon, x;
	do {
		printf("
Nhap 2 de duyet cay NLR
Nhap 1 de them.
Nhap 0 de thoat.
");
		printf("
Moi nhap lua chon cua ban.
");
		scanf_s("%d", &luachon);
		switch (luachon) {
		case 1: {
			printf("
Moi ban nhap so can chen: ");
			scanf_s("%d", &x);
			printf("
");
			addTree(tree, x);
			break;
		}
		case 2: {
			DuyetCayKhongDeQuy(tree);
			break;
		}
		}
	} while (luachon != 0);


	system("pause");
	return 0;
}
Bài liên quan
0