多叉树的根结点为二叉树的根,多叉树的结点的第一个儿子变成二叉树对应结点的左孩子,多叉树的结点的右兄弟变成二叉树种该结点的右孩子。代码如下:
C语言:
01
#include <stdio.h>
02 #include <sys/time.h>
03 #include <limits.h>
04 #include <stdlib.h>
05
06 typedef struct TreeNode {
07 int child_count;
08 int value;
09 struct TreeNode * child [ 0 ];
10 } TreeNode_t;
11
12 typedef struct BinaryTreeNode {
13 struct BinaryTreeNode * leftChild;
14 struct BinaryTreeNode * rightChild;
15 int value;
16 } BinaryTreeNode_t;
17
18 BinaryTreeNode_t * ToBinaryTree( TreeNode_t * root ){
19 if( root == NULL) {
20 return NULL;
21 }
22
23 BinaryTreeNode_t * binaryRoot = ( BinaryTreeNode_t *) malloc( sizeof( BinaryTreeNode_t));
24 binaryRoot -> value = root -> value;
25 binaryRoot -> leftChild = ToBinaryTree( root -> child [ 0 ]);
26
27 BinaryTreeNode_t * brother = binaryRoot -> leftChild;
28 int i;
29 for( i = 1; i < root -> child_count; i ++ ){
30 brother -> rightChild = ToBinaryTree( root -> child [ i ]);
31 brother = brother -> rightChild;
32 }
33 return binaryRoot;
34 }
35
36 TreeNode_t * Tn; /*多叉树的根*/
37 BinaryTreeNode_t * Bn; /*二叉树的根*/
38
39 int main ( int argc , char * argv [])
40 {
41 /*构造一棵简单的多叉树,用于测试*/
42 Tn = ( TreeNode_t *) malloc( 40);
43 TreeNode_t * t [ 5 ];
44 memset( t , 0 , sizeof( t));
45
46 TreeNode_t * tmp;
47 TreeNode_t * tmp1;
48 TreeNode_t * tmp2;
49 TreeNode_t * tmp3;
50 TreeNode_t * tmp4;
51 TreeNode_t * tmp5;
52
53 tmp = ( TreeNode_t *) malloc( sizeof( TreeNode_t) + sizeof( TreeNode_t *) * 5 );
54 tmp -> value = 'b';
55 tmp -> child_count = 3;
56 tmp1 = ( TreeNode_t *) malloc( 40);
57 tmp1 -> value = 'c';
58 tmp2 = ( TreeNode_t *) malloc( 40);
59 tmp2 -> value = 'd';
60
61 tmp3 = ( TreeNode_t *) malloc( 40);
62 tmp3 -> value = 'e';
63 tmp4 = ( TreeNode_t *) malloc( 40);
64 tmp4 -> value = 'f';
65 tmp5 = ( TreeNode_t *) malloc( 40);
66 tmp5 -> value = 'g';
67
68 tmp -> child [ 0 ] = tmp3;
69 tmp -> child [ 1 ] = tmp4;
70 tmp -> child [ 2 ] = tmp5;
71 for( i = 0; i < tmp -> child_count; i ++) {
72 printf( "%c /r/n " , tmp -> child [ i ] -> value);
73 }
74
75 Tn -> value = 'a';
76 Tn -> child_count = 3;
77 memset( t , 0 , sizeof( t));
78 t [ 0 ] = tmp;
79 t [ 1 ] = tmp1;
80 t [ 2 ] = tmp2;
81 memcpy( Tn -> child , t , sizeof( t));
82
83 /*转化为二叉树*/
84 Bn = ToBinaryTree( Tn);
85
86 return( 0);
87 }
02 #include <sys/time.h>
03 #include <limits.h>
04 #include <stdlib.h>
05
06 typedef struct TreeNode {
07 int child_count;
08 int value;
09 struct TreeNode * child [ 0 ];
10 } TreeNode_t;
11
12 typedef struct BinaryTreeNode {
13 struct BinaryTreeNode * leftChild;
14 struct BinaryTreeNode * rightChild;
15 int value;
16 } BinaryTreeNode_t;
17
18 BinaryTreeNode_t * ToBinaryTree( TreeNode_t * root ){
19 if( root == NULL) {
20 return NULL;
21 }
22
23 BinaryTreeNode_t * binaryRoot = ( BinaryTreeNode_t *) malloc( sizeof( BinaryTreeNode_t));
24 binaryRoot -> value = root -> value;
25 binaryRoot -> leftChild = ToBinaryTree( root -> child [ 0 ]);
26
27 BinaryTreeNode_t * brother = binaryRoot -> leftChild;
28 int i;
29 for( i = 1; i < root -> child_count; i ++ ){
30 brother -> rightChild = ToBinaryTree( root -> child [ i ]);
31 brother = brother -> rightChild;
32 }
33 return binaryRoot;
34 }
35
36 TreeNode_t * Tn; /*多叉树的根*/
37 BinaryTreeNode_t * Bn; /*二叉树的根*/
38
39 int main ( int argc , char * argv [])
40 {
41 /*构造一棵简单的多叉树,用于测试*/
42 Tn = ( TreeNode_t *) malloc( 40);
43 TreeNode_t * t [ 5 ];
44 memset( t , 0 , sizeof( t));
45
46 TreeNode_t * tmp;
47 TreeNode_t * tmp1;
48 TreeNode_t * tmp2;
49 TreeNode_t * tmp3;
50 TreeNode_t * tmp4;
51 TreeNode_t * tmp5;
52
53 tmp = ( TreeNode_t *) malloc( sizeof( TreeNode_t) + sizeof( TreeNode_t *) * 5 );
54 tmp -> value = 'b';
55 tmp -> child_count = 3;
56 tmp1 = ( TreeNode_t *) malloc( 40);
57 tmp1 -> value = 'c';
58 tmp2 = ( TreeNode_t *) malloc( 40);
59 tmp2 -> value = 'd';
60
61 tmp3 = ( TreeNode_t *) malloc( 40);
62 tmp3 -> value = 'e';
63 tmp4 = ( TreeNode_t *) malloc( 40);
64 tmp4 -> value = 'f';
65 tmp5 = ( TreeNode_t *) malloc( 40);
66 tmp5 -> value = 'g';
67
68 tmp -> child [ 0 ] = tmp3;
69 tmp -> child [ 1 ] = tmp4;
70 tmp -> child [ 2 ] = tmp5;
71 for( i = 0; i < tmp -> child_count; i ++) {
72 printf( "%c /r/n " , tmp -> child [ i ] -> value);
73 }
74
75 Tn -> value = 'a';
76 Tn -> child_count = 3;
77 memset( t , 0 , sizeof( t));
78 t [ 0 ] = tmp;
79 t [ 1 ] = tmp1;
80 t [ 2 ] = tmp2;
81 memcpy( Tn -> child , t , sizeof( t));
82
83 /*转化为二叉树*/
84 Bn = ToBinaryTree( Tn);
85
86 return( 0);
87 }
结果就懒得写输出了,debug下看Bn这个指针就ok了。
ps:代码用的代码发芽网http://fayaa.com/code转的html,还不错。