Posts

Showing posts from June, 2017

Tổng hợp code cây nhị phân _Lập trình C++ căn bản

*)Giới thiệu: - Cây nhị phân là một cấu trúc lưu trữ dữ liệu thông dụng trong thực tế. Nó giúp việc tìm kiếm, sắp xếp, lưu trữ,...dễ dàng và có tổ chức hơn. Sau đây là code tổng hợp các hàm thông dụng để thao tác trên cây nhị phân. *)Đối tượng hướng đến: - Các bạn đang học lập trình C/C++, dùng con trỏ thuần thục, đã làm quen với kiểu dữ liệu danh sách,list, queue,.. - Các đối tượng khác đọc tham khảo *) Code mẫu tổng hợp: #include<iostream> #include<queue> using namespace std ; struct Node { int data ; Node * Left ; Node * Right ; Node () { this -> Left = NULL ; this -> Right = NULL ; } }; Node * createNode ( int x ) { Node * P = new Node ; P -> data = x ; return P ; } struct Tree { Node * Root ; Tree () { cout << "Tree is declared \n " ; this -> Root = NULL ; } void add ( Node *& R , int x ); void deleteTree ( Node *& Root ); void romoveNode ( Node ...

Duyệt cây không dùng đệ quy và stack _Lập trình C++ căn bản

* )Giới thiệu: - Những thao tác trên cây thường rất đa dạng, mỗi loại thao tác lại có những phương thức và cách thao tác khác nhau. Thường thì người ta sẽ dùng đệ quy để tránh sự dài dòng, rắc rối. Chính vì đó, trong các tài liệu học tập trên trường học người ta ít đề cập đến việc thao tác với cây mà KHÔNG cần dùng đệ quy. Vậy hôm nay mình xin giới thiệu với các bạn cách duyệt cây nhị phân tìm kiếm theo kiểu InOrder(duyệt LNR) để minh họa.  Các kiểu duyệt khác (PreOrder, PostOrder,...) các bạn tự điều chỉnh lại cho phù hợp. *) Đối tượng hướng đến :  - Các bạn đang học lập trình C++, cấu trúc dữ liệu và giải thuật, có kiến thức vững chắc về con trỏ, cây nhị phân. *) Nội dung:  từ trước đến nay, khi tạo một cây thì chúng ta luôn thấy các nút lá có 2 con trỏ left và right là NULL(đây là dấu hiệu để nhận biết nó là nút lá(nói hơi thừa 😁😁😁😁)), ta sẽ lợi dụng các nút trống này để kết nối với các Node "tổ tiên" của nó. Những tác vụ này khiến các Node trên cây sẽ liên ...

Duyệt cây nhị phân theo chiều rộng _Lập trình C++

Image
*) Đối tượng hướng đến:   - Các bạn đang học cấu trúc dữ liệu và giải thuật, biết cách sử dụng con trỏ, biết về stack, queue   - Các bạn khác đọc tham khảo *)Nội dung:     Có rất nhiều cách duyệt cây nhị phân, mỗi cách phù hợp với từng nhu cầu riêng của lập trình viên. Thường thì chúng ta duyệt theo chiều sâu (tức là duyệt LNR, LRN, NLR,...). Nhưng ít đề cập đến việc duyệt cây theo chiều rộng. Vậy nên mình sẽ chia sẻ với các bạn một phần nhỏ về kiến thức duyệt cây theo chiều rộng. - Đầu tiên cần biết duyệt cây theo chiều rộng tức là sẽ xuất các giá trị trên cây theo thứ tự từ trái qua phải và từ trên xuống dưới, xét cây sau: nếu xuất theo chiều rộng thì thứ tự xuất sẽ là: 40 5 45 35 56 15 48 13 16 47 49 Để làm được điều này chúng ta cần sư dụng một hàng đợi (queue), hàng đợi này lần lượt sẽ chứa các nút theo thứ tự trên, tức là chứa 40-> 5-> 45-> 35-> 56-> 15-> 48-> 13 ->16-> 47-> 49. Mà theo quy luật của hàng đợi, thì phần tử và...

Cây Biểu thức_ Lập trình C++

Image
**) Đối tượng hướng đến: các bạn đã và đang học cấu trúc dữ liệu và giải thuật, các bạn chưa học muốn tìm hiểu trước thì vui lòng tìm hiểu về stack, cây nhị phân,...để dễ dàng tiếp thu thêm kiến thức này **) Nội dung     Cây Biểu thức là cây nhị phân trong đó các node lá là các toán hạng (a,b,c,..A,B,C,...) và các nút cha là các toán tử (+,-,*,/,...) thỏa mãn độ ưu tiên toán tử (nhân chia trước công trừ sau). Việc cài đặt  một cây nhị phân tìm kiếm thì có vẻ đơn giản nhưng để cài đặt một cây biểu thức thì không phải dễ đâu nhé 😅😅😅😅😅😅😅😅😅😅😅, bản thân mình phải trải qua một thời gian khá dài (khoảng 2 tiếng, 😅😅😅😅😅😅😅😅😅😅😅 ) từ bạn bè mới cài được nó. Đùa tý thôi, thật ra cũng khá khó thôi, không đến nỗi. Rồi, Dưới đây là hình ảnh của cây biểu thức   để cài đặt được một cái cây "ngắn ngắn " thế này cũng tốn khá nhiều thời gian đây, mình sẽ sơ lược các bước để cài đặt cây, code mẫu thì các bạn kéo xuống dưới để xem nhé!!! *...