1.其中字符串是指哪里,为什么要将字符串赋给s
2.为什么要串连接,串t是指什么,串连接中两个for循环的意思是什么
3.二叉链b产生先序序列化str中str,leftstr,str1,rightstr分别代表什么
其中
代码是什么意思
4.用先序序列化str创建二叉链代码的详细解释
如果可以我想知道整个代码的具体意思
//思路:先求出两个链表的长度,将链表以表尾对齐,令q和p分别指向str2和str1的头结点,长度较长的先走,直到链表的长度相等。然后判断两个链表对应的位置是否值相等。
int listlen(SNode *head){
int len=0;
while(head->next!=NULL){
len++;
head=head->next;
}
return len;
}
SNode * find_addr(SNode *str1,SNode *str2){
int m,n;
SNode *p,*q;
m=listlen(str1); //求str1的长度
n=listlen(str2); //求str2的长度
for(q=str1;m>n;m--)
p=p->next;
for(q=str2;m<n;n--)
p=p->next;
while(p->next!=NULL&&p->next!=q->next){
p=p->next;
q=q->next;
}
return p->next;
}
参考 https://blog.csdn.net/buibuilili/article/details/107721988
C++):二叉链表的创建与实现
可以参考下
https://blog.csdn.net/qq_51701007/article/details/120853065
在二叉链中,字符串通常用于表示节点的值,将字符串赋给变量s是因为需要用它来表示节点的值。
串连接是指将两个字符串连接起来形成一个新的字符串。在二叉链中,需要进行串连接是因为需要将两个节点的值连接起来形成一个新的节点值。
str = str + leftstr + rightstr是将左子树和右子树连接起来形成新的节点值的过程。其中leftstr和rightstr分别是左子树和右子树的先序序列化字符串。
节点的值用字符串表示,所以要赋值给变量S
StrAssign
的作用是将字符数组(即字符串)赋值给SqString
类型的变量s
。SqString
类型是一个自定义的数据结构,包含一个字符数组data
和一个整型变量length
,分别存储字符串内容和长度。StrConcat
用于将两个SqString
类型的变量s
和t
合并为一个新的SqString
。在这里,t
指的是待连接的字符串。函数中的两个for循环分别将s
和t
中的字符复制到新的字符串中。pre_order_seq
中,str
、left_str
和right_str
都是SqString
类型的变量,用于存储二叉树的序列化结果。str.data[0] = b->data; str.length = 1;
是将当前节点的值存入str
中。left_str = pre_order_seq(b->lchild);
是递归地序列化左子树,并将结果存入left_str
。str = StrConcat(str, left_str);
是将序列化左子树的结果追加到str
中。right_str = pre_order_seq(b->rchild);
和str = StrConcat(str, right_str);
是序列化右子树并将结果追加到str
中。create_pre_seq
用于根据先序序列化的结果创建二叉树。其中,static int i = 0;
是一个静态变量,用于在递归调用中保持其值。每次函数调用时,它表示应读取字符串中的哪个字符。value = str.data[i]; i++;
读取当前字符并将索引i
加一。value
等于'#'
,则返回NULL,表示该位置没有节点。b = (BTNode *)malloc(sizeof(BTNode));
分配新节点的内存。b->data = value;
将当前字符存入新节点。b->lchild = create_pre_seq(str);
和b->rchild = create_pre_seq(str);
递归地为左子树和右子树创建节点。CreateBTree
从括号表示法的字符串中创建二叉树。DispBTree
以括号表示法打印出二叉树。pre_order_seq
生成二叉树的先序序列化结果,打印出序列化结果。create_pre_seq
从先序序列化结果中重建二叉树。DispBTree
打印出重建的二叉树,并释放二叉树占用的内存。