Chinaunix首页 | 论坛 | 博客
  • 博客访问: 47050
  • 博文数量: 17
  • 博客积分: 720
  • 博客等级: 军士长
  • 技术积分: 157
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-15 11:23
文章分类

全部博文(17)

文章存档

2011年(4)

2010年(13)

我的朋友

分类:

2010-08-16 11:18:31

树节点结构
Struct Node {
    Node *pParent; //指向双亲的指针
    Node *pFirstChild; //指向左边第一个孩子的指针
    Node *pNext; //指向右侧兄弟的指针
}
根节点 Node root;
Node *p = &root;

问题:写一个函数 Node* getNextNode(Node* p) 使得下面的过程可以遍历整棵树。
while(p) {
    // 访问p节点
    p = getNextNode(p);
}

================解答=====================

Node* getNextNode(Node* p) {
    if (p->pFirstChild) {
        return p->pFirstChild; //深度优先,先访问第一个孩子
    } else if (p->pNext) {
        return p->pNext; //没有孩子节点后访问兄弟节点
    }
    while (!p->pParent->pNext) {
        p = p->pParent; //找到下一个有兄弟节点的节点
    }
    if (!p) {
        return NULL; //根节点的双亲节点为空,遍历结束
    }
    return p->pParent->pNext; //访问父节点的兄弟
}


请大家指正。
阅读(583) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-03-29 20:44:42

当p为root时,你的 while (!p->pParent->pNext) {会core掉, 该行应改为 while(p->pParent && !p->pParent->pNext ){ p = p->pParent; } if( p->pParent == NULL) { return NULL; } return p->pParent->pNext;