四、若將下圖當作樹,請分別用陣列與鏈結串列(Linked List)的方式來表示。 (20 分)

内容查看

654b47196b602.jpg

 

 

#include <iostream>

// Define the structure for a tree node
struct TreeNode {
int value;
TreeNode *left;
TreeNode *right;

TreeNode(int val) : value(val), left(nullptr), right(nullptr) {}
};

int main() {
// Create nodes as per the tree in the image
TreeNode *root = new TreeNode(1);

TreeNode *node2 = new TreeNode(2);
TreeNode *node3 = new TreeNode(3);
TreeNode *node4 = new TreeNode(4);
TreeNode *node5 = new TreeNode(5);
TreeNode *node6 = new TreeNode(6);

// Connect the nodes
root->left = node2;
root->right = node3;

node2->left = node4;

node3->right = node5;

node4->left = node6;

// The tree is now represented in memory as per the image

// Cleanup: Since we’re using raw pointers, we’ll need to manually deallocate memory.
// Note: In a real-world application, consider using smart pointers for better memory management.
delete root;
delete node2;
delete node3;
delete node4;
delete node5;
delete node6;

return 0;
}

用陣列表示

在使用陣列來表示二叉樹時,如果樹是完全二叉樹或接近完全二叉樹,這種表示法會非常有效。陣列的索引從1開始計數,對於任何位於index = i的節點:
  • 左子節點的索引為 2*i
  • 右子節點的索引為 2*i + 1
  • 父節點的索引為 i/2 (向下取整)
根據上面的樹結構,我們可以將其轉化為陣列表示如下(假設未使用的位置為0或null來表示沒有子節點):

index:   1  2  3  4  5  6
value:  [1, 2, 3, 4, 5, 6]

用鏈結串列表示

將一棵二叉樹直接映射到一個單一的鏈結串列是不直觀的,因為二叉樹的結構是二維的,而鏈結串列是一維的。但是,我們可以用一系列的鏈結串列表示樹的每一層或是使用鏈結串列來表示樹的前序、中序或後序遍歷。
例如,一個可能的前序遍歷(根 -> 左 -> 右)的鏈結串列表示可以是:
1 -> 2 -> 4 -> 6 -> 3 -> 5
点点赞赏,手留余香 给TA打赏

AI创作

0

評論0

支持多种货币
支持多种货币付款,满足您的付款需求
7天无忧退换
安心无忧购物,售后有保障
专业客服服务
百名资深客服7*24h在线服务
发货超时赔付
交易成功极速发货,专业水准保证时效性
顯示驗證碼

社交帳號快速登錄