Tôi đang tìm cách để tìm ra trình tự sắp xếp thứ tự của một nút trong BST withut sử dụng thêm không gian.tìm thứ tự sắp xếp trong BST mà không cần thêm bất kỳ khoảng trống nào
Trả lời
Để có được sự kế thừa inorder của một nút cho trước N
chúng tôi sử dụng các quy tắc sau:
- Nếu
N
có một đứa trẻ ngayR
thìinorderSuccessor(N)
là chết tận cùng bên trái củaR
. - khác
inorderSuccessor(N)
là tổ tiên gần nhất,M
, củaN
(nếu nó tồn tại) màN
là hậu duệ của những con tráiM
. Nếu không có tổ tiên như vậy, inorderSucessor không tồn tại.
Xem xét một cây mẫu:
A
/\
B C
/\
D E
/
F
ai inorder traversal cho: D B F E A C
inorderSuccessor(A)
= C
như C
là người chết tận cùng bên trái của đứa trẻ phải A
.
inorderSuccessor(B)
= F
là phần tử bên trái ngoài cùng bên phải của B
.
inorderSuccessor(C)
= Không tồn tại.
inorderSuccessor(D)
= B
là B
là con còn lại của D
.
inorderSuccessor(E)
= A
. E
không có con ngay vì vậy chúng tôi đã kịch bản 2. Chúng tôi đi đến mẹ của E
đó là B
, nhưng E
là người đã chết bên phải của B
, vì vậy chúng tôi chuyển đến mẹ của B
đó là A
và B
còn lại chết của A
nên A
là câu trả lời.
inorderSuccessor(F)
= E
là F
là con còn lại của E
.
Thủ tục:
treeNodePtr inorderSucessor(treeNodePtr N) {
if(N) {
treeNodePtr tmp;
// CASE 1: right child of N exists.
if(N->right) {
tmp = N->right;
// find leftmost node.
while(tmp->left) {
tmp = tmp->left;
}
// CASE 2: No right child.
} else {
// keep climbing till you find a parent such that
// node is the left decedent of it.
while((tmp = N->parent)) {
if(tmp->left == N) {
break;
}
N = tmp;
}
}
return tmp;
}
// No IOS.
return NULL;
}
Chỉnh sửa nhỏ trong phần giải thích của bạn về inorderSuccessor (D): đó là D là con trái của B. – ric0liva
Nếu bạn có thể truy cập thư mục gốc của một nút, thì đó chỉ là vấn đề di chuyển con trỏ xung quanh, do đó không có thêm khoảng trắng. Xem this lecture.
Nếu nút cho trước có một đứa trẻ ngay - hãy đến đó, và sau đó làm theo lặp đi lặp lại những đứa trẻ bên trái cho đến khi bạn đạt đến một nút N không có con bên trái. Trả lại N.
Nếu không, hãy làm theo cha mẹ cho đến khi bạn tìm thấy cha mẹ nơi nút đầu tiên là con trái. Trả lại phụ huynh này.
Node InOrderSuccessor(Node node) {
if (node.right() != null) {
node = node.right()
while (node.left() != null)
node = node.left()
return node
} else {
parent = node.getParent();
while (parent != null && parent.right() == node) {
node = parent
parent = node.getParent()
}
return parent
}
}
Điều này là sai. Điều gì xảy ra nếu nút đã cho không có con đúng và là con phải của cha mẹ? Bạn sẽ trả về một nút nhỏ hơn sau đó. – IVlad
IVlad: Cảm ơn, tôi nghĩ tôi đã sửa nó. –
node.getparent() chỉ hoạt động nếu lớp Node lưu trữ phụ huynh của mỗi nút! – theblackpearl
Các phương pháp sau đây sẽ giúp bạn xác định inorder kế KHÔNG CÓ NÚT PHỤ HUYNH HAY KHÔNG GIAN EXTRA NON-đệ quy
struct node * inOrderSuccessor(struct node *root, struct node *n)
{
//*If the node has a right child, return the smallest value of the right sub tree*
if(n->right != NULL)
return minValue(n->right);
//*Return the first ancestor in whose left subtree, node n lies*
struct node *succ=NULL;
while(root)
{
if(n->datadata < root->data)
{
succ=root; root=root->left;
}
else if(n->data > root->data)
root=root->right;
else break;
}
return succ;
}
Tôi khá chắc chắn điều này là đúng. Làm đúng nếu tôi sai. Cảm ơn.
- 1. Tìm phần tử nhỏ nhất thứ n trong mảng mà không cần sắp xếp?
- 2. sắp xếp kết quả mà không cần sử dụng theo thứ tự theo điều khoản
- 3. Xóa chuỗi số thứ tự từ BST
- 4. LXML - Sắp xếp Thứ tự Thẻ
- 5. Sắp xếp thứ tự SQL CTE và Thứ tự sắp xếp tùy chỉnh
- 6. Tìm các phần tử phổ biến trong N mảng được sắp xếp không có khoảng trống thừa
- 7. Thứ tự sắp xếp của Django admin
- 8. Sắp xếp lại thứ tự cột trong Navicat
- 9. Sắp xếp theo thứ tự tùy chỉnh
- 10. Sắp xếp số Div trong jQuery theo Thứ tự sắp xếp tùy chỉnh
- 11. jqGrid sắp xếp thứ tự mặc định?
- 12. Tự động tạo thứ tự sắp xếp với SQL UPDATE
- 13. Sắp xếp thứ tự một phần?
- 14. sắp xếp lại thứ tự byte trong chuỗi hex (python)
- 15. Paypal Mua ngay nút mà không cần gửi bất kỳ thứ gì?
- 16. Sắp xếp Hashtable theo thứ tự mà nó đã được tạo
- 17. Có bất kỳ lớp Trợ giúp sắp xếp Json Tắt-Kệ nào trong .NET BCL không?
- 18. Application thoát tự động mà không cần bất kỳ cảnh báo hay lỗi
- 19. CTE có sử dụng bất kỳ khoảng trống nào trong tempdb không?
- 20. Tìm mục thứ N của danh sách chưa phân loại mà không cần sắp xếp danh sách
- 21. Sắp xếp mảng (NSArray) theo thứ tự giảm dần
- 22. SortDescription và tự động sắp xếp thứ tự làm mới
- 23. Gọi một khoảng trống * làm chức năng mà không cần khai báo con trỏ hàm
- 24. Sắp xếp lại chú thích mà không thay đổi thứ tự các điểm trên lô
- 25. Cách sắp xếp các mục danh sách bằng cách sử dụng thứ tự sắp xếp tùy chỉnh trong jQuery
- 26. Có cẩu và sắp xếp lại thứ tương tự không?
- 27. Java cho mỗi vòng lặp: Sắp xếp thứ tự
- 28. Sắp xếp thứ tự trong bản đồ STL và đặt
- 29. TSQL - Có thể xác định thứ tự sắp xếp không?
- 30. Sắp xếp theo thứ tự abc trong đường ray
Thông tin nào được lưu trữ ở mỗi nút? Và phần nào bạn thấy khó khăn? Định nghĩa của "inorder"? Tìm người kế nhiệm? Hoặc là bạn có một phương pháp, nhưng phương pháp của bạn sử dụng thêm không gian? –
Có liên quan: http://stackoverflow.com/questions/3764799/applying-a-logarithm-to-navigate-a-tree – Arun