Chuyển đổi cây nhị phân thành danh sách Python

treeNode* newNode(int dữ liệu);

int countNodesOfList(listNode *head);

treeNode* sortedListToBTrecur(listNode **head_ref, int n);

/* Hàm này đếm số lượng

các nút trong Danh sách được liên kết và sau đó gọi */

treeNode* sortedListToBST(listNode *head)

/*Đếm số nút trong Linked List */

int n = countNodesOfList(đầu);

trả về sortedListToBTrecur(&head, n);

/* Hàm chính xây dựng

cân bằng BT và trả về gốc của nó

head_ref --> Con trỏ tới con trỏ tới

nút đầu danh sách liên kết n -> Không

của các nút trong Danh sách liên kết */

treeNode* sortedListToBTrecur(listNode **head_ref, int n)

/* Xây dựng đệ quy cây con bên trái */

treeNode *left = sortedListToBTrecur(head_ref, n/2);

/* Cấp phát bộ nhớ cho root, và

liên kết bên trái được xây dựng ở trên

treeNode *root = newNode((*head_ref)->data);

/* Thay đổi con trỏ đầu danh sách liên kết

cho các cuộc gọi đệ quy cha */

*head_ref = (*head_ref)->tiếp theo;

/* Xây dựng đệ quy bên phải

cây con và liên kết nó với gốc

Số nút trong cây con bên phải

là tổng số nút - số nút trong

cây con bên trái - 1 (đối với gốc) là n-n/2-1*/

root->right = sortedListToBTrecur(head_ref, n - n / 2 - 1);

/* Một hàm tiện ích trả về

số nút trong Danh sách được liên kết đã cho */

int countNodesOfList(listNode *head)

/* Hàm chèn một nút

ở đầu danh sách liên kết */

void push(listNode** head_ref, int new_data)

listNode* new_node = new listNode();

new_node->data = new_data;

/* liên kết danh sách cũ với nút mới */

new_node->next = (*head_ref);

/* di chuyển đầu để trỏ đến nút mới */

/* Hàm in các nút trong danh sách liên kết cho trước */

void printList(listNode *node)

/* Hàm trợ giúp phân bổ một nút mới với

dữ liệu đã cho và NULL con trỏ trái và phải. */

treeNode* newNode(dữ liệu int)

nút treeNode* = new treeNode();

in lượt đặt hàng trước của BT */

void preOrder(nút treeNode*)

/* Bắt đầu với danh sách rỗng */

/* Hãy tạo một danh sách liên kết được sắp xếp để kiểm tra các chức năng

Danh sách liên kết được tạo sẽ là 1->2->3->4->5->6->7 */

cout<<"Danh sách liên kết ban đầu là. “;

treeNode *root = sortedListToBST(head);

cout<<"\nChuyển BT từ Gốc đến Lá. “;

// trộn (hợp nhất) hai danh sách liên kết được sắp xếp

BinaryTreeNode* concatenate_lists(

// sử dụng left cho trước đó

BinaryTreeNode* tail1 = head1->left;

BinaryTreeNode* tail2 = head2 -> left;

BinaryTreeNode* convert_to_linked_list(

BinaryTreeNode* list1 = convert_to_linked_list(root->left);

BinaryTreeNode* list2 = convert_to_linked_list(root->right);

gốc->trái = gốc->phải = gốc;

BinaryTreeNode* result = concatenate_lists(list1, root);

kết quả = concatenate_lists(kết quả, danh sách2);

vectorget_vector(BinaryTreeNode* đầu) {

BinaryTreeNode* temp = đầu;

vectororig_data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};

BinaryTreeNode* root = create_BST(orig_data);

vectorall_data = binary_tree_to_vector(root);

BinaryTreeNode* head = convert_to_linked_list(root);

vectorv = get_vector(đầu);

khẳng định (is_equal (v, all_data));

Điều này có thể đạt được bằng cách duyệt cây theo thứ tự, trái nút con -> gốc -> nút phải. Duyệt cây con bên trái và chuyển nó thành danh sách liên kết kép bằng cách thêm các nút vào cuối danh sách. Theo cách này, nút ngoài cùng bên trái sẽ trở thành đầu danh sách. Sau đó, chuyển cây con bên phải thành danh sách liên kết kép

Dylan_T_Rabbit
Con én không tải

Bài đăng. 2

Chủ đề. 1

Đã tham gia. Tháng 7 năm 2017

Danh tiếng. 0

12-07-2017, 10. 48 giờ sáng

Tôi có một cấu trúc cây mà tôi cần chuyển đổi thành danh sách các danh sách.
Lớp cho một nút được định nghĩa là (đã loại bỏ chi tiết không liên quan).
______0Cây đại diện cho các nước đi hợp lệ trong trò chơi cờ bàn. Trò chơi có ba viên xúc xắc, vì vậy độ sâu tối đa của cây là 4 (1 cấp cho nút gốc và 1 cho mỗi viên xúc xắc) và mỗi nút có thể có tối đa 15 con. Sau khi tạo và tỉa cây mình được cây như bên dưới.

ROOT
. _____ (0, 3)
. _______ (0, 4)
.          . _____ (0, 5)
.          . _____ (3, 8)
.          . _____ (4, 9)
.
. _______ (3, 7)
. _____ (0, 5)
. _____ (7, 12)

Mỗi nút chứa một nước đi ở dạng bộ đại diện cho vị trí đầu và cuối bàn cờ của một quân cờ (ngoài ROOT, có (-1,-1 . ) Mình cần convert cây này thành list list như sau.

  • Mỗi nhánh phải là một danh sách các bộ dữ liệu trong nhánh đó, được sắp xếp từ lá đến gốc
  • Các danh sách được tạo từ mỗi nhánh được tập hợp thành một danh sách, thứ tự không liên quan
For the tree above, this should be:

[
[(-1,-1), (0,3), (0,4), (0,5)]
[(-1,-1), (0,3), (0,4), (3,8)]
[(-1,-1), (0,3), (0,4), (4,9)]
[(-1,-1), (0,3), (3,7), (0,5)]
[(-1,-1), (0,3), (3,7), (7,12)]
]

I have the following function so far:
def tree2list(self):
       if len(self._children) == 0:
           return [self._data]
       else:
           node_list = [[self._data] + child.tree2list() for child in self._children]
           return node_list
Which outputs:

Output:

[[(-1, -1), [(0, 3), [(0, 4), (0, 5)], [(0, 4), (3, 8)], [(0, 4), (4, 9)]], [(0, 3), [(3, 7), (0, 5)], [(3, 7), (7, 12)]]]]
Reformatted for clarity:

[inline][
[(-1, -1), [(0, 3), [(0, 4), (0, 5)],
                    [(0, 4), (3, 8)],
                    [(0, 4), (4, 9)]
           ],
           [(0, 3), [(3, 7), (0, 5)],
                    [(3, 7), (7, 12)]
           ]
]
][/inline]

How can I get my 'tree2list' function to output the desired list of lists?

Thanks for any help

Dylan

Hồi đáp

Tìm thấy

Hồi đáp

ichabod801
Thỏ con

Chuyển đổi cây nhị phân thành danh sách Python

Bài đăng. 4.231

Chủ đề. 97

Đã tham gia. Tháng 9 năm 2016

Danh tiếng. 273

Jul-12-2017, 01. 43 giờ chiều

Bạn cần truyền dữ liệu xuống đệ quy và sử dụng nó ở cuối. Một cái gì đó như thế này.

______3Mã chưa kiểm tra. Sử dụng có nguy cơ của riêng bạn.

Craig "Ichabod" O'Brien - xenomind. com
Chúc em hạnh phúc.
Hướng dẫn được đề xuất. BBCode, hàm, lớp, cuộc phiêu lưu văn bản

Hồi đáp

Trang web Tìm

Hồi đáp

Làm cách nào để chuyển cây nhị phân thành danh sách liên kết?

Cho một cây nhị phân, làm phẳng nó thành danh sách liên kết tại chỗ. Không được phép sử dụng cấu trúc dữ liệu phụ trợ. Sau khi làm phẳng, bên trái của mỗi nút sẽ trỏ đến NULL và bên phải sẽ chứa nút tiếp theo theo thứ tự trước. Cách tiếp cận đơn giản. Một giải pháp đơn giản là sử dụng Truyền tải thứ tự cấp bằng hàng đợi .

Làm cách nào để chuyển đổi danh sách thành cây nhị phân trong Python?

Để giải quyết vấn đề này, chúng ta sẽ làm theo các bước sau. .
Nếu A trống, thì trả về Null
tìm phần tử ở giữa và root nó
Chia mảng thành hai mảng con, phần bên trái của phần tử giữa và phần bên phải của phần tử giữa
thực hiện đệ quy cùng một tác vụ cho phân đoạn bên trái và phân đoạn bên phải

Làm cách nào để tạo cây tìm kiếm nhị phân từ danh sách các số trong Python?

Đầu tiên, chọn phần tử đầu tiên của mảng và root nó. Chọn phần tử thứ hai, nếu giá trị của nó nhỏ hơn giá trị nút gốc thì đặt nó là con trái, ngược lại thì đặt nó là con phải. Bây giờ gọi đệ quy bước (2) và bước (3) để tạo BST từ Trình duyệt đơn hàng cấp độ của nó

Làm cách nào để chuyển đổi cây thành danh sách trong Java?

Điều này có thể đạt được bằng cách duyệt cây theo thứ tự, đó là trái nút con -> nút gốc -> nút bên phải. Duyệt qua cây con bên trái và chuyển đổi nó thành danh sách liên kết kép bằng cách thêm các nút vào cuối danh sách . Bằng cách này, nút ngoài cùng bên trái sẽ trở thành đầu danh sách.