C语言实现逆序打印叶子节点路径
实现的功能,输入一个广义表,实现打印所有叶子结点到根节点的逆序路径
算法思想:
首先通过字符串的形式读入广义表
然后通过分析字符串进行广义表和二叉树的转换:
//根据广义表创建二叉树
BT* createBTByGLists(char* gLists, int nodeQuantity) {
BT* rootNode = NULL;
BT* currentNode = NULL;
//创建指针数组作为栈结构
BT** stack = (BT**) malloc(sizeof(BT*)* nodeQuantity);
int top = -1;
int flag = 0;
int index = 0;
char c = gLists[index];
while (c != '\0') {
switch (c) {
case '(':
stack[++top] = currentNode;
flag = LEFT;
break;
case ',':
flag = RIGHT;
break;
case ')':
top--;
break;
case ' ':
break;
default:
currentNode = (BT*) malloc(sizeof(BT));
currentNode->data = c;
currentNode->left = currentNode->right = NULL;
if (rootNode == NULL) {
rootNode = currentNode;
} case LEFT:
stack[top]->left = currentNode;
break;
case RIGHT:
stack[top]->right = currentNode;
break;
}
}
}
c = gLists[++index];
}
free

该博客介绍了一种使用C语言将广义表转换为二叉树,并逆序打印所有叶子节点到根节点路径的方法。首先,通过字符串解析创建二叉树,然后使用栈来存储节点值,递归地从叶子节点遍历到根节点,打印路径。提供的示例输入为'a(b(c(d,e)),f(g,h(i,j)))',输出为'dcba', 'ecba', 'gfa', 'ihfa', 'jhfa'。
最低0.47元/天 解锁文章
3808

被折叠的 条评论
为什么被折叠?



