我需要建立树中所有树叶的列表 例如,我有以下树:
6
/ \
4 3
/\ /\
1 2 5 7
treeNode typedef
typedef struct treeNode {
int data;
struct treeNode* parent;
struct treeNode* left;
struct treeNode* right;
} TreeNode;
我的列表应为1-> 2-> 5-> 7
列出typedef
typedef struct list {
ListNode* head;
ListNode* tail;
} List;
listNode typedef
typedef struct listNode {
int data;
struct listNode* next;
} ListNode;
Listnode-> data = TreeNode-> data; (listnode结构数据)
该函数应该是通用的,我累了几个递归函数但没有工作
有什么想法吗? 提前谢谢。
答案 0 :(得分:4)
基本思想是遍历树in-order,并将遇到的每个叶节点推送到列表中。如下所示:
int main()
{
Server srv(PORT);
if (srv.server_create()) {
std::cout << "Server bind!\n";
srv.server_run();
}
else {
std::cout << "Bind fail! ERRNO: "<<errno<<"\n";
return -1;
}
return 0;
}
答案 1 :(得分:0)
您可以尝试使用递归来完成此操作。你要做的是首先检查你是否已经到达叶子节点,即。如果左右指针为NULL
,则在这种情况下将节点添加到列表中。伪代码如下所示:
getLeavesList(root) {
if root is NULL: return
if root is leaf_node: add_to_leaves_list(root)
getLeavesList(root -> left)
getLeavesList(root -> right)
}
您可以将此代码改编为任何编程语言。因此,如果root为NULL,那么,如果函数没有收到有效指针,则返回错误消息。如果根是叶子,那么,如果左子节点和右子节点都是NULL,则必须将其添加到叶节点列表中。然后,您使用左右子节点递归调用该函数。