【发布时间】:2014-05-23 01:45:11
【问题描述】:
我正在尝试遍历一个“位串”,它给出了一个二叉树的方向。我遇到的问题是在节点到达末尾(null)时打印节点的值,然后返回到顶部,直到最后命中“位字符串”中的某个字符。
所以字符串:
char * directions = "RRLRRLRLLRLRRS";
将从根开始然后向右>右>左>右(假设击中离开)然后它会回到根并遍历右>左>右>左>左(然后切换回每次找到叶子的根,然后一旦它击中“S”,它就会停止遍历。
我现在拥有的代码现在正试图从它最后命中的节点中获取值以进行调试,并且它没有打印任何内容。如何解决这个问题?
(顺序只是帮助确定它在树中的位置)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node {
int order;
char value;
struct Node * left;
struct Node * right;
} Node;
Node * insert(Node * node, char value, int order){
if(node == NULL){
node = (Node *)malloc(sizeof(Node));
node->value = value;
node->order = order;
node->left = NULL;
node->right = NULL;
return node;
}
if(order > node->order){
node->right = insert(node->right, value, order);
}
else if(order < node->order){
node->left = insert(node->left, value, order);
}
else {
return;
}
return node;
}
int main(){
Node * root = NULL;
char * directions = "RRLRRLRLLRLRRS";
int length = (int)strlen(directions);
int i;
root = insert(root, -1, 6);
root = insert(root, -1, 4);
root = insert(root, -1, 2);
root = insert(root, 32, 1);
root = insert(root, 114, 3);
root = insert(root, 108, 5);
root = insert(root, -1, 12);
root = insert(root, -1, 8);
root = insert(root, 111, 7);
root = insert(root, -1, 10);
root = insert(root, 101, 9);
/* basics to see values at this point */
i = 0;
while(directions[i] != 'S'){
if(directions[i] == 'L'){
printf(root->value);
root = root->left;
}
else if(directions[i] == 'R'){
printf(root->value);
root = root->right;
}
i++;
}
return 0
}
【问题讨论】: