二叉链表示的二叉树中增设双亲结点并输出所有结点到根结点的路径

在二叉树的二叉链表存储结构中 ,增设一个双亲节点的parent指针,设计一个算法,给这个指针赋值,并输出所有节点到根节点的路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <stdio.h>
#include <stdlib.h>
#define TElemType int
typedef struct BiTNode{
TElemType data;//数据域
struct BiTNode *lchild,*rchild,*parent;//左,右孩子,双亲指针
}BiTNode,*BiTree;
void CreateBiTree(BiTree *T){
*T=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->data=1;
(*T)->parent=NULL;
(*T)->lchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->lchild->data=2;
(*T)->lchild->parent=(*T);
(*T)->rchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->rchild->data=3;
(*T)->rchild->parent=(*T);
(*T)->rchild->lchild=NULL;
(*T)->rchild->rchild=NULL;
(*T)->lchild->lchild=(BiTNode*)malloc(sizeof(BiTNode));
(*T)->lchild->lchild->data=4;
(*T)->lchild->lchild->parent=(*T)->lchild;
(*T)->lchild->rchild=NULL;
(*T)->lchild->lchild->lchild=NULL;
(*T)->lchild->lchild->rchild=NULL;
}


//增设双亲节点的解法1
int f(BiTNode *p)
{
BiTNode *pre;
if(p!=NULL)
{
pre=p;
if(p->lchild!=NULL)
p->lchild->parent=p;
if(p->rchild!=NULL)
p->rchild->parent=p;
f(p->lchild);
f(p->rchild);
}

}

//增设双亲节点的解法1
int f2(BiTNode *p,BiTNode *q)
{
if(p!=NULL)
{
p->parent=q;
q=p;
f2(p->lchild,q);
f2(p->rchild,q);
}
}
void printPath(BiTNode *p)
{
while(p!=NULL)
{
printf("%d",p->data);
p=p->parent;
}

}

void allpath(BiTNode *p)
{
if(p!=NULL)
{
printPath(p);
printf("\n");
allpath(p->lchild);
allpath(p->rchild);
}

}
int main() {
BiTree Tree;
CreateBiTree(&Tree);
//f(Tree);
BiTNode *q=NULL;
//f2(Tree,q);
allpath(Tree);

}

凡希 wechat
喜欢所以热爱,坚持干货分享,欢迎订阅我的微信公众号
呐,请我吃辣条