二叉树的遍历

中序遍历

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 struct tree
 5 {
 6     int data;
 7     struct tree* left;
 8     struct tree* right;
 9 };
10 
11 typedef struct tree treenode;
12 typedef treenode* btree;
13 
14 btree insertnode(btree root,int value)
15 {
16     btree newnode;
17     btree current;
18     btree back;
19     
20     newnode = (btree)malloc(sizeof(treenode));
21     newnode->data = value;
22     newnode->left = NULL;
23     newnode->right = NULL;
24     if(root == NULL)
25     {
26         return newnode;
27     }
28     else
29     {
30         current = root;
31         while(current != NULL)
32         {
33             back = current;
34             if(current->data > value)
35                 current = current->left;
36             else
37                 current = current->right;
38         }
39         if(back->data > value)
40             back->left = newnode;
41         else
42             back->right = newnode;
43     }
44     return root;
45 }
46 
47 
48 btree createbtree(int* data,int len)
49 {
50     btree root = NULL;
51     int i;
52     
53     for(i = 0;i < len;i++)
54         root = insertnode(root,data[i]);
55     return root;
56 }
57 
58 
59 void inorder(btree ptr)
60 {
61     if(ptr != NULL)
62     {
63         inorder(ptr->left);
64         printf("[%2d]\n",ptr->data);
65         inorder(ptr->right);
66     }
67 }
68 
69 int main()
70 {
71     btree root = NULL;
72     
73     int data[9] = {5,6,4,8,2,3,7,1,9};
74     root = createbtree(data,9);
75     printf("树的节点内容 \n");
76     inorder(root);
77     return 0;
78 }

二叉树的遍历

前序遍历

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 struct tree
 5 {
 6     int data;
 7     struct tree* left;
 8     struct tree* right;
 9 };
10 
11 typedef struct tree treenode;
12 typedef treenode* btree;
13 
14 btree insertnode(btree root,int value)
15 {
16     btree newnode;
17     btree current;
18     btree back;
19     
20     newnode = (btree)malloc(sizeof(treenode));
21     newnode->data = value;
22     newnode->left = NULL;
23     newnode->right = NULL;
24     if(root == NULL)
25     {
26         return newnode;
27     }
28     else
29     {
30         current = root;
31         while(current != NULL)
32         {
33             back = current;
34             if(current->data > value)
35                 current = current->left;
36             else
37                 current = current->right;
38         }
39         if(back->data > value)
40             back->left = newnode;
41         else
42             back->right = newnode;
43     }
44     return root;
45 }
46 
47 
48 btree createbtree(int* data,int len)
49 {
50     btree root = NULL;
51     int i;
52     
53     for(i = 0;i < len;i++)
54         root = insertnode(root,data[i]);
55     return root;
56 }
57 
58 
59 void preorder(btree ptr)
60 {
61     if(ptr != NULL)
62     {
63         printf("[%2d]\n",ptr->data);
64         preorder(ptr->left);
65         preorder(ptr->right);
66     }
67 }
68 
69 int main()
70 {
71     btree root = NULL;
72     
73     int data[9] = {5,6,4,8,2,3,7,1,9};
74     root = createbtree(data,9);
75     printf("树的节点内容 \n");
76     preorder(root);
77     return 0;
78 }

二叉树的遍历

后序遍历

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 struct tree
 5 {
 6     int data;
 7     struct tree* left;
 8     struct tree* right;
 9 };
10 
11 typedef struct tree treenode;
12 typedef treenode* btree;
13 
14 btree insertnode(btree root,int value)
15 {
16     btree newnode;
17     btree current;
18     btree back;
19     
20     newnode = (btree)malloc(sizeof(treenode));
21     newnode->data = value;
22     newnode->left = NULL;
23     newnode->right = NULL;
24     if(root == NULL)
25     {
26         return newnode;
27     }
28     else
29     {
30         current = root;
31         while(current != NULL)
32         {
33             back = current;
34             if(current->data > value)
35                 current = current->left;
36             else
37                 current = current->right;
38         }
39         if(back->data > value)
40             back->left = newnode;
41         else
42             back->right = newnode;
43     }
44     return root;
45 }
46 
47 
48 btree createbtree(int* data,int len)
49 {
50     btree root = NULL;
51     int i;
52     
53     for(i = 0;i < len;i++)
54         root = insertnode(root,data[i]);
55     return root;
56 }
57 
58 
59 void postorder(btree ptr)
60 {
61     if(ptr != NULL)
62     {
63         postorder(ptr->left);
64         postorder(ptr->right);
65         printf("[%2d]\n",ptr->data);
66     }
67 }
68 
69 int main()
70 {
71     btree root = NULL;
72     
73     int data[9] = {5,6,4,8,2,3,7,1,9};
74     root = createbtree(data,9);
75     printf("树的节点内容 \n");
76     postorder(root);
77     return 0;
78 }

二叉树的遍历

上一篇:二叉树的递归创建,二叉树查找,二叉树结点的删除代码


下一篇:DOM节点操作