二叉樹的基本操作

sunmenggmail發表於2012-04-16
  1. 轉自:http://blog.csdn.net/randyjiawenjie/article/details/6329712
  2. void insert(tNode root,int data)  
  3. {  
  4.     tNode newNode = (tNode)malloc(sizeof(treeNode));  
  5.     newNode->data = data;  
  6.     newNode->lchild = NULL;  
  7.     newNode->rchild = NULL;  
  8.     tNode current = root;  
  9.     tNode parent;  
  10.     while (1)  
  11.     {  
  12.         parent = current;  
  13.         if (current->data > newNode->data)  
  14.         {  
  15.             current = current->lchild;  
  16.             if (current == NULL)  
  17.             {  
  18.                 parent->lchild = newNode;  
  19.                 return;  
  20.             }  
  21.         }  
  22.         else  
  23.         {  
  24.             current = current->rchild;  
  25.             if (current == NULL)  
  26.             {  
  27.                 parent->rchild = newNode;  
  28.                 return;  
  29.             }  
  30.         }  
  31.     }  
  32. }  
  33. /** 
  34.  * 遞迴中序遍歷二叉樹 
  35.  */  
  36. void preOrder(tNode root)  
  37. {  
  38.     if (root != NULL)  
  39.     {  
  40.         preOrder(root->lchild);  
  41.         printf("%d  ",root->data);  
  42.         preOrder(root->rchild);  
  43.     }  
  44. }  
  45. /** 
  46.  * 求二叉樹葉子節點數目 
  47.  */  
  48. int getLeaf(tNode root)  
  49. {  
  50.     if (root == NULL)  
  51.         return 0;  
  52.     else  
  53.         if (root->lchild == NULL && root->rchild == NULL)  
  54.             return 1;  
  55.         else  
  56.             return getLeaf(root->lchild) + getLeaf(root->rchild);  
  57. }  
  58. /** 
  59.  * 求二叉樹的深度 
  60.  */  
  61. int getDepth(tNode root)  
  62. {  
  63.     if (root == NULL)  
  64.         return 0;  
  65.     else  
  66.         return getDepth(root->lchild) > getLeaf(root->rchild)? 1 + getDepth(root->lchild): 1 + getDepth(root->rchild);  
  67. //  {  
  68. //      int depthLchild = 1 + getDepth(root->lchild);  
  69. //      int depthRchild = 1 + getDepth(root->rchild);  
  70. //      return depthLchild > depthRchild ? depthLchild: depthRchild;  
  71. //  }  
  72. }  
  73. int main()  
  74. {  
  75.     tNode root = (tNode)malloc(sizeof(treeNode));  
  76.     root->data = 10;  
  77.     root->lchild = NULL;  
  78.     root->rchild = NULL;  
  79. //  insert(root,10);  
  80.     insert(root,5);  
  81.     insert(root,15);  
  82.     insert(root,1);  
  83.     insert(root,8);  
  84.     insert(root,20);  
  85.     insert(root,12);  
  86.     preOrder(root);  
  87.     printf("/n");  
  88.     int numleaf = getLeaf(root);  
  89.     printf("%d/n", numleaf);  
  90.     int depth = getDepth(root);  
  91.     printf("%d/n",depth);  
  92.     return 0;  
  93. }  

相關文章