多叉树转二叉树

多叉树的根结点为二叉树的根,多叉树的结点的第一个儿子变成二叉树对应结点的左孩子,多叉树的结点的右兄弟变成二叉树种该结点的右孩子。代码如下:

C语言:
01 #include
02 #include
03 #include
04 #include
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,还不错。

你可能感兴趣的:(C/C++)