关于二叉树遍历的一点小问题
#include <stdio.h>
#include "BTree.h"
typedef struct _tag_Node Node;
struct _tag_Node{
BTreeNode header;
char v;
};
void printf_data(BTreeNode* node)
{
printf("%c",((Node*)node)->v);
}
BTreeNode* p = NULL;
void thread_via_left(BTreeNode* root)
{
if( root != NULL )
{
if(p != NULL)
{
p->left = root;
p = NULL;
}
if(root->left == NULL)
{
p = root;
}
thread_via_left(root->left);
thread_via_left(root->right);
}
}
int main()
{
BTree* tree = BTree_Create();
Node n1 = {{NULL,NULL},'A'};
Node n2 = {{NULL,NULL},'B'};
Node n3 = {{NULL,NULL},'C'};
Node n4 = {{NULL,NULL},'D'};
Node n5 = {{NULL,NULL},'E'};
Node n6 = {{NULL,NULL},'F'};
Node n7 = {{NULL,NULL},'G'};
BTree_Insert(tree, (BTreeNode*)&n1,0x00,0,0);
BTree_Insert(tree, (BTreeNode*)&n2,0x00,1,0);
BTree_Insert(tree, (BTreeNode*)&n3,0x01,1,0);
BTree_Insert(tree, (BTreeNode*)&n4,0x00,2,0);
// BTree_Insert(tree, (BTreeNode*)&n5,0x00,3,0);
// BTree_Insert(tree, (BTreeNode*)&n6,0x02,2,0);
// BTree_Insert(tree, (BTreeNode*)&n7,0x01,2,0);
BTreeNode* current = BTree_Root(tree);
thread_via_left(current);
while(current != NULL)
{
printf("%c",((Node*)current)->v);
current = current->left;
}
BTree_Destroy(tree);
return 0;
}
请问为什么把上面红色的部分放在它下面蓝色的那部分结构体里面就不能把这个二叉树遍历了,这个p操作的是root的地址,它不是已经将它的left指针指向下一个元素了吗,那么在Main里面还需要用到p吗?还有为什么假如要把P改为main里面的局部变量的话,为什么要把void thread_via_left(BTreeNode* root)改为void thread_via_left(BTreeNode* root,BTreeNode **p),要改为向thread_via_left传二重指针,为什么不是一生指针呢?