Download as pdf or txt
Download as pdf or txt
You are on page 1of 7

Chức năng chèn phần tử vào cây (tạo con trỏ root, khai báo biến key);

//Tìm kiếm một node với giá trị đã cho


Tạo con trỏ ptr = root;
Cha của khóa đã được chèn;
Dùng vòng lặp while để kiểm tra xem key đã tồn tại hay chưa
Comparenode là để mô phỏng so sánh trên graphic
Nếu key=node hiện tại thì key đã tồn tại trong tree nên sẽ in ra màn hình graphic thông
báo:”Giá trị đã tồn tại!”, rồi trở về gốc ban đầu

//Lưu node cha của key


Nếu key < node hiện tại, LTAG=false
nghĩa là ko có thread nên nó đi tiếp
qua node con bên trái của node hiện
tại.
Else break nghĩa là LTAG/RTAG=true
là găp thread thì thoát khỏi vòng lặp
while.
Tương tự, key > node hiện tại, RTAG=false nghĩa là ko có thread nên nó đi tiếp
qua node con bên phải của node hiện tại.

Khi chèn bất kì nút nào trong cây nhị phân luồng, sẽ có ba trường hợp sẽ phát
sinh:
1. Khi nút mới được chèn vào cây trống:
Khi nút mới được chèn vào cây tìm kiếm nhị phân có luồng trống, đặt con trỏ trái
và phải của nó là con trỏ null.
2. Khi nút mới được chèn vào làm nút con bên trái của nút nào đó trong cây:
Khi nút mới được chèn vào cây tìm kiếm nhị phân với tư cách là con trái của một
số nút đã tồn tại, thì sẽ thực hiện hai thao tác trong cấu trúc của cha và hai thao
tác trong cấu trúc của con chẳng hạn:
+ Đối với node con: (Đặt con trỏ bên trái của nút con thành tiền thân thứ tự của
nút cha và con trỏ bên phải của nút con tới nút cha khi nút mới được chèn vào
nút con bên trái.) Đối với nút con mới được chèn thì đặt điểm bên trái của nó
sang bên trái của nút cha và điểm bên phải của nút cha.
Tmp->LLINK = par->LLINK;
Tmp->RLINK = par;
+ Đối với node cha: của nút con được chèn thì đặt LTAG=true cho biết node con
bên trái tồn tại và cũng đặt nút bên trái là tạm thời vì nút con là tiền thân theo
thứ tự mới cho nút cha và cũng là nút con bên trái của nút cha.
Par->LTAG=true;
Par->LLINK=tmp;
3. Khi nút mới được chèn vào làm nút con bên phải của nút nào đó trong cây:
Thực hiện thao tác tương tự như trường hợp 2.
+ Đối với node con: Giả sử nút mới được chèn vào là nút con và nút mà nó
được chèn vào là nút cha thì chúng ta có thể nói rằng nút cha của nút con
được chèn bây giờ là nút tiền nhiệm theo thứ tự và nút kế vị theo thứ tự
của nút cha hiện là nút kế thừa theo thứ tự cho nút con .Vì vậy, luồng bên
trái và bên phải của nút mới sẽ là
+ Đối với node cha: Con trỏ bên phải của nút cha hiện trỏ đến nút mới được
chèn và thiết lập biến bool của nó thành true cho biết tồn tại một nút con
bên phải.
Hàm valiate hàm xác thực cây nhị phân theo luồng
Đồng thời kết hợp với các hàm DrawNodeColor và MoveNode để thực hiện việc
mô phỏng quá trình thêm 1 node mới, kiểm tra node, di chuyển node vào vị trí của nó
trong cây Threaded.

- Hàm CheckInput(562-567) và hàm Validate(570-574) để kiểm tra giá trị nhập vào từ bàn
phím có phù hợp với yêu cầu để chứa trong node hay không. Giúp bổ trợ quá quá trình
nhập dữ liệu trong hàm main.
Chức năng tìm kiếm phần tử trong cây (tạo con
trỏ root, khai báo biến key);
Tạo con trỏ curr=root;
Nếu node hiện tại==key chỉ ra rằng phần tử đã
được tìm thấy sau đó, in ra màn hình graphic
thông báo đã tìm thấy;
Nếu key<node hiện tại
//Di chuyển đến node kế tiếp theo thứ tự của
node hiện tại
Nếu key < node hiện tại, LTAG=false nghĩa là ko
có thread nên nó đi tiếp qua node con bên trái
của node hiện tại.
Else break nghĩa là LTAG/RTAG=true là găp thread thì thoát khỏi vòng lặp while.
Tương tự, key > node hiện tại, RTAG=false nghĩa là ko có thread nên nó đi tiếp qua node con
bên phải của node hiện tại.
//Di chuyển đến tiền thân thứ tự của nút
hiện tại
Nếu không tìm thấy phần tử thì in ra màn
hình graphic thông báo không tìm thấy
Switch(choice): Cấu trúc điều khiển và rẽ nhánh hoàn toàn
//Chấp nhận đầu vào là chuỗi
item = std::stoi(str); Chuyển đổi chuỗi thành số nguyên
settextstyle(10, HORIZ_DIR, 3);//settextstyle(int font, int direction, int
charsize);thiết lập kiểu chữ hiện ra trên màn hình.//Đặt font chữ văn bản, hướng
hiển thị văn bản và kích thước của các kí tự

“Nhập giá trị cần chèn :”


//Gọi hàm kiểm tra input xem có hợp lệ hay ko
Nếu sai thì cout :”Đầu vào ko hợp lệ!”

Root==nullptr-> Cây rỗng


Khác thì “Nhập giá trị cần tìm :”;
// Gọi hàm kiểm tra input có hợp lệ hay không
cout <<Phần tử<<item<<Tìm thấy trong cây
Không tìm thấy trong cây
Nhấn phím bất kì để quay lại
Trong hàm main của chương trình, xây dựng các lệnh biểu thị những tùy chọn ra trên màn
hình.

You might also like