Duyệt Cây Nhị Phân Không đệ Quy - Programming - Dạy Nhau Học Trang chủ » Duyệt Cây Bằng Stack » Duyệt Cây Nhị Phân Không đệ Quy - Programming - Dạy Nhau Học Có thể bạn quan tâm Duyệt Cây Bst Duyệt Cây Dùng Stack Duyệt Cây Lnr Duyệt Cây Theo Thứ Tự Lnr Duyệt Cây Theo Thứ Tự Trước C Duyệt cây nhị phân không đệ quy programming binary-tree HoangNew (Hoang) November 18, 2020, 11:36am #1 Chả là thầy e có giao bài tập thực hành về duyệt cây nhị phân không đệ quy ( ) và còn 1 vấn đề nữa về con trỏ 2 chiều vấn đề là ntn ạ ( em khai báo 1 con trỏ Tree ntn Tree *tree, tree là con trỏ 2 chiều cho em hỏi 1 tí về công dụng của nó ạ, liệu nó có thể trỏ tới 1 thằng bất kỳ trong (1 cái tree khác cùng kiểu dữ liệu và tree->left và tree->right liệu nó có hiểu được không ạ) || hay là có từ khóa nào có thể giúp chỉ tới 1 vị trí và có khả năng như vị trí nó vừa chỉ vào không ạ!! Em cảm ơn trước ạ . Bphvcg (bphvcg) December 9, 2016, 4:49pm #2 Không hiểu câu hỏi của bạn lắm Bạn hỏi bản chất của Node hay của 1 Tree? 1 Like HoangNew (Hoang) December 9, 2016, 4:50pm #3 bản chất của node em hiểu rồi ạ 1 tree em cũng hiểu rùi ạ em chỉ không biết làm thế nào để duyệt cây nhị phân không đệ quy thôi ạ @@! Bphvcg (bphvcg) December 9, 2016, 4:52pm #4 bạn có thể tham khảo thêm video này! HoangNew (Hoang) December 9, 2016, 5:03pm #5 vâng ạ bạn có thể cho mình hỏi đoạn code này tại sao nó không chạy vào Empty(stack) k. #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 (stack.top == NULL) { 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("\nNhap 2 de duyet cay NLR\nNhap 1 de them.\nNhap 0 de thoat.\n"); printf("\nMoi nhap lua chon cua ban.\n"); scanf_s("%d", &luachon); switch (luachon) { case 1: { printf("\nMoi ban nhap so can chen: "); scanf_s("%d", &x); printf("\n"); addTree(tree, x); break; } case 2: { DuyetCayKhongDeQuy(tree); break; } } } while (luachon != 0); system("pause"); return 0; } drgnz (Drgnz) December 9, 2016, 4:59pm #6 Bạn có thể markdown lại code giúp mình được ko Khá đơn giản thôi: 1/ Tách đoạn code thành 1 đoạn riêng với văn bản 2/ Bôi đen 3/ Nhấn Ctrl + Shiflt + C 2 Likes Bphvcg (bphvcg) December 9, 2016, 4:59pm #7 Mình không biết tại sao HoangNew (Hoang) December 9, 2016, 5:00pm #8 #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("\nNhap 2 de duyet cay NLR\nNhap 1 de them.\nNhap 0 de thoat.\n"); printf("\nMoi nhap lua chon cua ban.\n"); scanf_s("%d", &luachon); switch (luachon) { case 1: { printf("\nMoi ban nhap so can chen: "); scanf_s("%d", &x); printf("\n"); addTree(tree, x); break; } case 2: { DuyetCayKhongDeQuy(tree); break; } } } while (luachon != 0); system("pause"); return 0; } HoangNew (Hoang) December 9, 2016, 5:00pm #9 đây ạ @@! giúp e với DayNhauHoc's Discord Học C++ Free? Click Blog Dạy Nhau Học Tự Học Lập Trình 83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao? Từ khóa » Duyệt Cây Bằng Stack 5. Duyệt Cây Dùng Stack - YouTube Bài Tập Sử Dụng Stack Duyệt Cây Nhị Phân Tìm Kiếm Theo LNR Thay đệ ... Duyệt Cây Bằng Stack | My World Duyệt Cây Nhị Phân Theo Thứ Tự Sau Bằng Giải Thuật Không đệ Quy Sử ... Chi Tiết Bài Học Duyệt Cây Theo Chiều Sâu - Vimentor Duyệt Cây Nhị Phân Tìm Kiếm - Freetuts Duyệt Cây Nhị Phân Không đệ Quy - Viết Bằng C++ Duyệt Cây Trong Cấu Trúc Dữ Liệu Và Giải Thuật Các Thuật Toán Duyệt Cây Nhị Phân Cài đặt Thuật Toán Duyệt Qua Cây ... Implement Bài Toán Duyệt Cây Nhị Phân Với Rust | TopDev Chủ đề: Sử Dụng Stack Duyệt Cây Nhị Phân Tìm Kiếm Theo NLR [PDF] Bài 4 CẤU TRÚC DỮ LIỆU - Soict Duyệt Cây Không Dùng đệ Quy Và Stack _Lập Trình C++ Căn Bản Duyệt Cây Nhị Phân NLR , LNR Và LRN Bằng Stack Trong Ngôn Ngữ C