博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指Offer-第3章 高质量代码
阅读量:6250 次
发布时间:2019-06-22

本文共 22476 字,大约阅读时间需要 74 分钟。

第3章 高质量代码

3中错误处理的方法

面试题11: 数值的整数次方

bool g_InvalidInput = false;bool equal(double num1, double num2);double PowerWithUnsignedExponent(double base, unsigned int exponent); double Power(double base, int exponent){    g_InvalidInput = false;     if(equal(base, 0.0) && exponent < 0)    {        g_InvalidInput = true;        return 0.0;    }     unsigned int absExponent = (unsigned int)(exponent);    if(exponent < 0)        absExponent = (unsigned int)(-exponent);     double result = PowerWithUnsignedExponent(base, absExponent);    if(exponent < 0)        result = 1.0 / result;     return result;} /*double PowerWithUnsignedExponent(double base, unsigned int exponent){    double result = 1.0;    /    for(int i = 1; i <= exponent; ++i)        result *= base;     return result;}*/double PowerWithUnsignedExponent(double base, unsigned int exponent){    if(exponent == 0)        return 1;    if(exponent == 1)        return base;    double result = PowerWithUnsignedExponent(base, exponent >> 1);    result *= result;    if((exponent & 0x1) == 1)        result *= base;    return result;}bool equal(double num1, double num2){    if((num1 - num2 > -0.0000001)        && (num1 - num2 < 0.0000001))        return true;    else        return false;}// ====================测试代码====================void Test(double base, int exponent, double expectedResult, bool expectedFlag){    double result = Power(base, exponent);    if(abs(result - expectedResult) < 0.00000001         && g_InvalidInput == expectedFlag)        printf("Test passed.\n");    else        printf("Test failed.\n");}int main(int argc, char* argv[]){    // 底数、指数都为正数    printf("Test1 begins.\n");    Test(2, 3, 8, false);    // 底数为负数、指数为正数    printf("Test2 begins.\n");    Test(-2, 3, -8, false);    // 指数为负数    printf("Test3 begins.\n");    Test(2, -3, 0.125, false);    // 指数为0    printf("Test4 begins.\n");    Test(2, 0, 1, false);    // 底数、指数都为0    printf("Test5 begins.\n");    Test(0, 0, 1, false);    // 底数为0、指数为正数    printf("Test6 begins.\n");    Test(0, 4, 0, false);    // 底数为0、指数为负数    printf("Test7 begins.\n");    Test(0, -4, 0, true);    return 0;}

面试题12: 打印1到最大的n位数

void PrintNumber(char*number);bool Increment(char* number);void Print1ToMaxOfNDigits_1(int n){    if(n<=0)        return ;    char* number=new char[n+1];    memset(number,'0',sizeof(char)*(n+1));    number[n]='\0';    while(!Increment(number)){        PrintNumber(number);    }    delete[] number;}void PrintNumber(char* number){    char* p=number;    while(*p=='0')        p++;    printf("%s\n",p);}bool Increment(char* number){    int len=strlen(number);    int carry=0,r;    int t;    for(int i=len-1;i>=0;i--){        t=number[i]-'0'+carry;        if(i==len-1)            t++;        if(i==0&&t>9)            return  true;        r=t%10;        carry=t/10;        number[i]='0'+r;    }    return false;}// ====================方法二====================void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index) {    if(index==length-1){        PrintNumber(number);    }    else{        for(int i=0;i<10;i++){            number[index+1]=i+'0';        Print1ToMaxOfNDigitsRecursively(number,length,index+1);        }    }} void Print1ToMaxOfNDigits_2(int n){    if(n<=0)        return ;    char* number=new char[n+1];    memset(number,'0',sizeof(char)*(n+1));    number[n]='\0';    for(int i=0;i<10;i++){        number[0]=i+'0';        Print1ToMaxOfNDigitsRecursively(number,n,0);    }}// ====================测试代码====================void Test(int n){    printf("Test for %d begins:\n", n);    Print1ToMaxOfNDigits_1(n);    Print1ToMaxOfNDigits_2(n);    printf("Test for %d ends.\n", n);}int main(int argc, char* argv[]){    Test(1);    Test(2);    Test(3);    Test(4);    Test(0);    Test(-1);    return 0;}

这个面试题其实很简单的,就是利用快排中交换的思想. 这儿想要说明一个函数指针的使用问题.

代码如下:

void Reorder(int *pData, unsigned int length, bool (*func)(int));bool isEven(int n);// ====================方法一====================void ReorderOddEven_1(int *pData, unsigned int length){    if(pData == NULL || length == 0)        return;    int *pBegin = pData;    int *pEnd = pData + length - 1;    while(pBegin < pEnd)    {        // 向后移动pBegin,直到它指向偶数        while(pBegin < pEnd && (*pBegin & 0x1) != 0)            pBegin ++;        // 向前移动pEnd,直到它指向奇数        while(pBegin < pEnd && (*pEnd & 0x1) == 0)            pEnd --;        if(pBegin < pEnd)        {            int temp = *pBegin;            *pBegin = *pEnd;            *pEnd = temp;        }    }}// ====================方法二====================void ReorderOddEven_2(int *pData, unsigned int length){    Reorder(pData, length, isEven);}void Reorder(int *pData, unsigned int length, bool (*func)(int)){    if(pData == NULL || length == 0)        return;    int *pBegin = pData;    int *pEnd = pData + length - 1;    while(pBegin < pEnd)     {        // 向后移动pBegin        while(pBegin < pEnd && !func(*pBegin))            pBegin ++;        // 向前移动pEnd        while(pBegin < pEnd && func(*pEnd))            pEnd --;        if(pBegin < pEnd)        {            int temp = *pBegin;            *pBegin = *pEnd;            *pEnd = temp;        }    }}bool isEven(int n){    return (n & 1) == 0;}// ====================测试代码====================void PrintArray(int numbers[], int length){    if(length < 0)        return;    for(int i = 0; i < length; ++i)        printf("%d\t", numbers[i]);    printf("\n");}void Test(char* testName, int numbers[], int length){    if(testName != NULL)        printf("%s begins:\n", testName);    int* copy = new int[length];    for(int i = 0; i < length; ++i)    {        copy[i] = numbers[i];    }    printf("Test for solution 1:\n");    PrintArray(numbers, length);    ReorderOddEven_1(numbers, length);    PrintArray(numbers, length);    printf("Test for solution 2:\n");    PrintArray(copy, length);    ReorderOddEven_2(copy, length);    PrintArray(copy, length);    delete[] copy;}void Test1(){    int numbers[] = {
1, 2, 3, 4, 5, 6, 7}; Test("Test1", numbers, sizeof(numbers)/sizeof(int));}void Test2(){ int numbers[] = {
2, 4, 6, 1, 3, 5, 7}; Test("Test2", numbers, sizeof(numbers)/sizeof(int));}void Test3(){ int numbers[] = {
1, 3, 5, 7, 2, 4, 6}; Test("Test3", numbers, sizeof(numbers)/sizeof(int));}void Test4(){ int numbers[] = {
1}; Test("Test4", numbers, sizeof(numbers)/sizeof(int));}void Test5(){ int numbers[] = {
2}; Test("Test5", numbers, sizeof(numbers)/sizeof(int));}void Test6(){ Test("Test6", NULL, 0);}int main(int argc, char* argv[]){ Test1(); Test2(); Test3(); Test4(); Test5(); Test6(); return 0;}

代码如下:

ListNode* FindKthToTail(ListNode* pListHead, unsigned int k){    if(pListHead==0||k==0)        return 0;    ListNode* p=pListHead;    for(int i=1;i
m_pNext; if(p==0) return 0; } ListNode* q=pListHead; while(p->m_pNext!=0){ p=p->m_pNext; q=q->m_pNext; } return q;}// ====================测试代码====================// 测试要找的结点在链表中间void Test1(){ printf("=====Test1 starts:=====\n"); ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); printf("expected result: 4.\n"); ListNode* pNode = FindKthToTail(pNode1, 2); PrintListNode(pNode); DestroyList(pNode1);}// 测试要找的结点是链表的尾结点void Test2(){ printf("=====Test2 starts:=====\n"); ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); printf("expected result: 5.\n"); ListNode* pNode = FindKthToTail(pNode1, 1); PrintListNode(pNode); DestroyList(pNode1);}// 测试要找的结点是链表的头结点void Test3(){ printf("=====Test3 starts:=====\n"); ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); printf("expected result: 1.\n"); ListNode* pNode = FindKthToTail(pNode1, 5); PrintListNode(pNode); DestroyList(pNode1);}// 测试空链表void Test4(){ printf("=====Test4 starts:=====\n"); printf("expected result: NULL.\n"); ListNode* pNode = FindKthToTail(NULL, 100); PrintListNode(pNode);}// 测试输入的第二个参数大于链表的结点总数void Test5(){ printf("=====Test5 starts:=====\n"); ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); printf("expected result: NULL.\n"); ListNode* pNode = FindKthToTail(pNode1, 6); PrintListNode(pNode); DestroyList(pNode1);}// 测试输入的第二个参数为0void Test6(){ printf("=====Test6 starts:=====\n"); ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); printf("expected result: NULL.\n"); ListNode* pNode = FindKthToTail(pNode1, 0); PrintListNode(pNode); DestroyList(pNode1);}int main(int argc, char* argv[]){ Test1(); Test2(); Test3(); Test4(); Test5(); Test6(); return 0;}

代码如下:

ListNode* ReverseList(ListNode* pHead){    if(pHead==0)        return 0;    ListNode* p=pHead,*pp=0,*q=0;    while(p!=0){        q=p->m_pNext;        p->m_pNext=pp;        pp=p;        p=q;    }    return pp;}// ====================测试代码====================ListNode* Test(ListNode* pHead){    printf("The original list is: \n");    PrintList(pHead);    ListNode* pReversedHead = ReverseList(pHead);    printf("The reversed list is: \n");    PrintList(pReversedHead);    return pReversedHead;}// 输入的链表有多个结点void Test1(){    ListNode* pNode1 = CreateListNode(1);    ListNode* pNode2 = CreateListNode(2);    ListNode* pNode3 = CreateListNode(3);    ListNode* pNode4 = CreateListNode(4);    ListNode* pNode5 = CreateListNode(5);    ConnectListNodes(pNode1, pNode2);    ConnectListNodes(pNode2, pNode3);    ConnectListNodes(pNode3, pNode4);    ConnectListNodes(pNode4, pNode5);    ListNode* pReversedHead = Test(pNode1);    DestroyList(pReversedHead);}// 输入的链表只有一个结点void Test2(){    ListNode* pNode1 = CreateListNode(1);    ListNode* pReversedHead = Test(pNode1);    DestroyList(pReversedHead);}// 输入空链表void Test3(){    Test(NULL);}int main(int argc, char* argv[]){    Test1();    Test2();    Test3();    return 0;}

代码如下:

ListNode* Merge(ListNode* pHead1, ListNode* pHead2){    if(pHead1==0)        return pHead2;    if(pHead2==0)        return pHead1;    ListNode* pMerge;    if(pHead1->m_nValue
m_nValue){ pMerge=pHead1; pMerge->m_pNext=Merge(pHead1->m_pNext,pHead2); } else{ pMerge=pHead2; pMerge->m_pNext=Merge(pHead1,pHead2->m_pNext); } return pMerge;}// ====================测试代码====================ListNode* Test(char* testName, ListNode* pHead1, ListNode* pHead2){ if(testName != NULL) printf("%s begins:\n", testName); printf("The first list is:\n"); PrintList(pHead1); printf("The second list is:\n"); PrintList(pHead2); printf("The merged list is:\n"); ListNode* pMergedHead = Merge(pHead1, pHead2); PrintList(pMergedHead); printf("\n\n"); return pMergedHead;}// list1: 1->3->5// list2: 2->4->6void Test1(){ ListNode* pNode1 = CreateListNode(1); ListNode* pNode3 = CreateListNode(3); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode3); ConnectListNodes(pNode3, pNode5); ListNode* pNode2 = CreateListNode(2); ListNode* pNode4 = CreateListNode(4); ListNode* pNode6 = CreateListNode(6); ConnectListNodes(pNode2, pNode4); ConnectListNodes(pNode4, pNode6); ListNode* pMergedHead = Test("Test1", pNode1, pNode2); DestroyList(pMergedHead);}// 两个链表中有重复的数字// list1: 1->3->5// list2: 1->3->5void Test2(){ ListNode* pNode1 = CreateListNode(1); ListNode* pNode3 = CreateListNode(3); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode3); ConnectListNodes(pNode3, pNode5); ListNode* pNode2 = CreateListNode(1); ListNode* pNode4 = CreateListNode(3); ListNode* pNode6 = CreateListNode(5); ConnectListNodes(pNode2, pNode4); ConnectListNodes(pNode4, pNode6); ListNode* pMergedHead = Test("Test2", pNode1, pNode2); DestroyList(pMergedHead);}// 两个链表都只有一个数字// list1: 1// list2: 2void Test3(){ ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pMergedHead = Test("Test3", pNode1, pNode2); DestroyList(pMergedHead);}// 一个链表为空链表// list1: 1->3->5// list2: 空链表void Test4(){ ListNode* pNode1 = CreateListNode(1); ListNode* pNode3 = CreateListNode(3); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode3); ConnectListNodes(pNode3, pNode5); ListNode* pMergedHead = Test("Test4", pNode1, NULL); DestroyList(pMergedHead);}// 两个链表都为空链表// list1: 空链表// list2: 空链表void Test5(){ ListNode* pMergedHead = Test("Test5", NULL, NULL);}int main(int argc, char* argv[]){ Test1(); Test2(); Test3(); Test4(); Test5(); return 0;}

代码如下:

bool DoesTree1HaveTree2(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2);bool HasSubtree(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2){    bool flag=false;    if(pRoot1!=0&&pRoot2!=0){        flag=DoesTree1HaveTree2(pRoot1,pRoot2);        if(!flag)            flag=HasSubtree(pRoot1->m_pLeft,pRoot2)||HasSubtree(pRoot1->m_pRight,pRoot2);    }    return flag;}bool DoesTree1HaveTree2(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2){    if(pRoot2==0)        return true;    if(pRoot1==0)        return false;    if(pRoot1->m_nValue!=pRoot2->m_nValue)        return false;    return DoesTree1HaveTree2(pRoot1->m_pLeft,pRoot2->m_pLeft)&&        DoesTree1HaveTree2(pRoot1->m_pRight,pRoot2->m_pRight);}// ====================测试代码====================void Test(char* testName, BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2, bool expected){    if(HasSubtree(pRoot1, pRoot2) == expected)        printf("%s passed.\n", testName);    else        printf("%s failed.\n", testName);}// 树中结点含有分叉,树B是树A的子结构//                  8                8//              /       \           / \//             8         7         9   2//           /   \//          9     2//               / \//              4   7void Test1(){    BinaryTreeNode* pNodeA1 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeA2 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeA3 = CreateBinaryTreeNode(7);    BinaryTreeNode* pNodeA4 = CreateBinaryTreeNode(9);    BinaryTreeNode* pNodeA5 = CreateBinaryTreeNode(2);    BinaryTreeNode* pNodeA6 = CreateBinaryTreeNode(4);    BinaryTreeNode* pNodeA7 = CreateBinaryTreeNode(7);    ConnectTreeNodes(pNodeA1, pNodeA2, pNodeA3);    ConnectTreeNodes(pNodeA2, pNodeA4, pNodeA5);    ConnectTreeNodes(pNodeA5, pNodeA6, pNodeA7);    BinaryTreeNode* pNodeB1 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeB2 = CreateBinaryTreeNode(9);    BinaryTreeNode* pNodeB3 = CreateBinaryTreeNode(2);    ConnectTreeNodes(pNodeB1, pNodeB2, pNodeB3);    Test("Test1", pNodeA1, pNodeB1, true);    DestroyTree(pNodeA1);    DestroyTree(pNodeB1);}// 树中结点含有分叉,树B不是树A的子结构//                  8                8//              /       \           / \//             8         7         9   2//           /   \//          9     3//               / \//              4   7void Test2(){    BinaryTreeNode* pNodeA1 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeA2 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeA3 = CreateBinaryTreeNode(7);    BinaryTreeNode* pNodeA4 = CreateBinaryTreeNode(9);    BinaryTreeNode* pNodeA5 = CreateBinaryTreeNode(3);    BinaryTreeNode* pNodeA6 = CreateBinaryTreeNode(4);    BinaryTreeNode* pNodeA7 = CreateBinaryTreeNode(7);    ConnectTreeNodes(pNodeA1, pNodeA2, pNodeA3);    ConnectTreeNodes(pNodeA2, pNodeA4, pNodeA5);    ConnectTreeNodes(pNodeA5, pNodeA6, pNodeA7);    BinaryTreeNode* pNodeB1 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeB2 = CreateBinaryTreeNode(9);    BinaryTreeNode* pNodeB3 = CreateBinaryTreeNode(2);    ConnectTreeNodes(pNodeB1, pNodeB2, pNodeB3);    Test("Test2", pNodeA1, pNodeB1, false);    DestroyTree(pNodeA1);    DestroyTree(pNodeB1);}// 树中结点只有左子结点,树B是树A的子结构//                8                  8//              /                   / //             8                   9   //           /                    ///          9                    2//         /      //        2        //       ///      5void Test3(){    BinaryTreeNode* pNodeA1 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeA2 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeA3 = CreateBinaryTreeNode(9);    BinaryTreeNode* pNodeA4 = CreateBinaryTreeNode(2);    BinaryTreeNode* pNodeA5 = CreateBinaryTreeNode(5);    ConnectTreeNodes(pNodeA1, pNodeA2, NULL);    ConnectTreeNodes(pNodeA2, pNodeA3, NULL);    ConnectTreeNodes(pNodeA3, pNodeA4, NULL);    ConnectTreeNodes(pNodeA4, pNodeA5, NULL);    BinaryTreeNode* pNodeB1 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeB2 = CreateBinaryTreeNode(9);    BinaryTreeNode* pNodeB3 = CreateBinaryTreeNode(2);    ConnectTreeNodes(pNodeB1, pNodeB2, NULL);    ConnectTreeNodes(pNodeB2, pNodeB3, NULL);    Test("Test3", pNodeA1, pNodeB1, true);    DestroyTree(pNodeA1);    DestroyTree(pNodeB1);}// 树中结点只有左子结点,树B不是树A的子结构//                8                  8//              /                   / //             8                   9   //           /                    ///          9                    3//         /      //        2        //       ///      5void Test4(){    BinaryTreeNode* pNodeA1 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeA2 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeA3 = CreateBinaryTreeNode(9);    BinaryTreeNode* pNodeA4 = CreateBinaryTreeNode(2);    BinaryTreeNode* pNodeA5 = CreateBinaryTreeNode(5);    ConnectTreeNodes(pNodeA1, pNodeA2, NULL);    ConnectTreeNodes(pNodeA2, pNodeA3, NULL);    ConnectTreeNodes(pNodeA3, pNodeA4, NULL);    ConnectTreeNodes(pNodeA4, pNodeA5, NULL);    BinaryTreeNode* pNodeB1 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeB2 = CreateBinaryTreeNode(9);    BinaryTreeNode* pNodeB3 = CreateBinaryTreeNode(3);    ConnectTreeNodes(pNodeB1, pNodeB2, NULL);    ConnectTreeNodes(pNodeB2, pNodeB3, NULL);    Test("Test4", pNodeA1, pNodeB1, false);    DestroyTree(pNodeA1);    DestroyTree(pNodeB1);}// 树中结点只有右子结点,树B是树A的子结构//       8                   8//        \                   \ //         8                   9   //          \                   \//           9                   2//            \      //             2        //              \//               5void Test5(){    BinaryTreeNode* pNodeA1 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeA2 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeA3 = CreateBinaryTreeNode(9);    BinaryTreeNode* pNodeA4 = CreateBinaryTreeNode(2);    BinaryTreeNode* pNodeA5 = CreateBinaryTreeNode(5);    ConnectTreeNodes(pNodeA1, NULL, pNodeA2);    ConnectTreeNodes(pNodeA2, NULL, pNodeA3);    ConnectTreeNodes(pNodeA3, NULL, pNodeA4);    ConnectTreeNodes(pNodeA4, NULL, pNodeA5);    BinaryTreeNode* pNodeB1 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeB2 = CreateBinaryTreeNode(9);    BinaryTreeNode* pNodeB3 = CreateBinaryTreeNode(2);    ConnectTreeNodes(pNodeB1, NULL, pNodeB2);    ConnectTreeNodes(pNodeB2, NULL, pNodeB3);    Test("Test5", pNodeA1, pNodeB1, true);    DestroyTree(pNodeA1);    DestroyTree(pNodeB1);}// 树A中结点只有右子结点,树B不是树A的子结构//       8                   8//        \                   \ //         8                   9   //          \                 / \//           9               3   2//            \      //             2        //              \//               5void Test6(){    BinaryTreeNode* pNodeA1 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeA2 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeA3 = CreateBinaryTreeNode(9);    BinaryTreeNode* pNodeA4 = CreateBinaryTreeNode(2);    BinaryTreeNode* pNodeA5 = CreateBinaryTreeNode(5);    ConnectTreeNodes(pNodeA1, NULL, pNodeA2);    ConnectTreeNodes(pNodeA2, NULL, pNodeA3);    ConnectTreeNodes(pNodeA3, NULL, pNodeA4);    ConnectTreeNodes(pNodeA4, NULL, pNodeA5);    BinaryTreeNode* pNodeB1 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeB2 = CreateBinaryTreeNode(9);    BinaryTreeNode* pNodeB3 = CreateBinaryTreeNode(3);    BinaryTreeNode* pNodeB4 = CreateBinaryTreeNode(2);    ConnectTreeNodes(pNodeB1, NULL, pNodeB2);    ConnectTreeNodes(pNodeB2, pNodeB3, pNodeB4);    Test("Test6", pNodeA1, pNodeB1, false);    DestroyTree(pNodeA1);    DestroyTree(pNodeB1);}// 树A为空树void Test7(){    BinaryTreeNode* pNodeB1 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeB2 = CreateBinaryTreeNode(9);    BinaryTreeNode* pNodeB3 = CreateBinaryTreeNode(3);    BinaryTreeNode* pNodeB4 = CreateBinaryTreeNode(2);    ConnectTreeNodes(pNodeB1, NULL, pNodeB2);    ConnectTreeNodes(pNodeB2, pNodeB3, pNodeB4);    Test("Test7", NULL, pNodeB1, false);    DestroyTree(pNodeB1);}// 树B为空树void Test8(){    BinaryTreeNode* pNodeA1 = CreateBinaryTreeNode(8);    BinaryTreeNode* pNodeA2 = CreateBinaryTreeNode(9);    BinaryTreeNode* pNodeA3 = CreateBinaryTreeNode(3);    BinaryTreeNode* pNodeA4 = CreateBinaryTreeNode(2);    ConnectTreeNodes(pNodeA1, NULL, pNodeA2);    ConnectTreeNodes(pNodeA2, pNodeA3, pNodeA4);    Test("Test8", pNodeA1, NULL, false);    DestroyTree(pNodeA1);}// 树A和树B都为空void Test9(){    Test("Test9", NULL, NULL, false);}int main(int argc, char* argv[]){    Test1();    Test2();    Test3();    Test4();    Test5();    Test6();    Test7();    Test8();    Test9();    return 0;}

转载于:https://www.cnblogs.com/xkfz007/archive/2012/11/07/2758129.html

你可能感兴趣的文章
静态与动态加载Dll [示例代码]
查看>>
QtGui.QCalendarWidget
查看>>
高内聚低耦合 浅析
查看>>
数组与对象的深浅复制
查看>>
uploadify上传
查看>>
Google Kubernetes设计文档之服务篇-转
查看>>
spring与jdbc整合
查看>>
django -- 插入行的不同方式
查看>>
paho.mqtt.embedded-c MQTTPacket transport.c hacking
查看>>
在接口测试中怎么处理开发是否提供接口文档的总结
查看>>
HDU_1086 You can Solve a Geometry Problem too(几何题)
查看>>
Autodesk Infrastructure Modeler (原Galileo伽利略项目)已经正式发布
查看>>
jQuery.Easyui 1.2.4 CHM API 下载
查看>>
我的KT库之----数据库的操作(DbCommandExecutor)
查看>>
在新窗口中打开链接 javascript
查看>>
开发自动化插件地址记录
查看>>
华为 U8800 的国际版、港版、联通版ROM下载地址
查看>>
POJO模式
查看>>
HDU_1398 Square Coins(生成函数)
查看>>
margin-left是做边距,是宽度 left是定位盒子左上角左边位置的一个点
查看>>