返回信息流对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。
给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class TreeLevel {
public:
void getTreeLevelCore(TreeNode *root, int dep, int cur, ListNode *pHead){
if(cur == dep){
ListNode *curNode = new ListNode(root->val);
curNode->next = pHead;
pHead = curNode;
return;
}
getTreeLevelCore(root->left, dep, cur+1, pHead);
getTreeLevelCore(root->right, dep, cur+1, pHead);
}
ListNode* getTreeLevel(TreeNode* root, int dep) {
// write code here
ListNode * pHead = new ListNode(-1);
int cur = 1;
getTreeLevelCore(root, dep, cur, pHead);
return pHead;
}
};
上面是我写的代码,没有什么问题啊,但是貌似只能返回链表的最后一个节点,这是为啥呢??
完整测试代码在附件名为:11.cpp
求大神抽空帮我看看[em17]
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #87963同步于 2015/9/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
一道简单的二叉树算法题目
erlingyier
2015/9/23镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
你把同层最后一个节点放在了最前面,把最左边的节点放在了最右边。你把这两句顺序翻一下,应该就是从左到右的顺序了。
getTreeLevelCore(root->left, dep, cur+1, pHead);
getTreeLevelCore(root->right, dep, cur+1, pHead);
void getTreeLevelCore(TreeNode *root, int dep, int cur, ListNode *pHead){ 改成
void getTreeLevelCore(TreeNode *root, int dep, int cur, ListNode * &pHead){
然后;
getTreeLevelCore(root->left, dep, cur+1, pHead);
getTreeLevelCore(root->right, dep, cur+1, pHead);
改成
getTreeLevelCore(root->right, dep, cur+1, pHead);
getTreeLevelCore(root->left, dep, cur+1, pHead);
就OK了
【 在 erlingyier 的大作中提到: 】
: 对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。
: 给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。
: struct TreeNode {
: ...................