树节点结构
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; //访问父节点的兄弟
}
请大家指正。
阅读(617) | 评论(1) | 转发(0) |