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];