• 《剑指offer》第五十五题(二叉树的深度)


    // 面试题55(一):二叉树的深度
    // 题目:输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的
    // 结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
    
    //如果左右节点只有一个存在,则深度为该存在的节点的深度+1
    //如果左右节点都存在,则深度为最大子节点深度+1
    
    #include <iostream>
    #include "BinaryTree.h"
    
    int TreeDepth(const BinaryTreeNode* pRoot)
    {
        if (pRoot == nullptr)
            return 0;
    
        int nLeft = TreeDepth(pRoot->m_pLeft);
        int nRight = TreeDepth(pRoot->m_pRight);
    
        return (nLeft > nRight) ? (nLeft + 1) : (nRight + 1);
    }
    
    // ====================测试代码====================
    void Test(const char* testName, const BinaryTreeNode* pRoot, int expected)
    {
        int result = TreeDepth(pRoot);
        if (expected == result)
            printf("%s passed.
    ", testName);
        else
            printf("%s FAILED.
    ", testName);
    }
    
    //            1
    //         /      
    //        2        3
    //       /         
    //      4  5         6
    //        /
    //       7
    void Test1()
    {
        BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1);
        BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2);
        BinaryTreeNode* pNode3 = CreateBinaryTreeNode(3);
        BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4);
        BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5);
        BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6);
        BinaryTreeNode* pNode7 = CreateBinaryTreeNode(7);
    
        ConnectTreeNodes(pNode1, pNode2, pNode3);
        ConnectTreeNodes(pNode2, pNode4, pNode5);
        ConnectTreeNodes(pNode3, nullptr, pNode6);
        ConnectTreeNodes(pNode5, pNode7, nullptr);
    
        Test("Test1", pNode1, 4);
    
        DestroyTree(pNode1);
    }
    
    //               1
    //              /
    //             2
    //            /
    //           3
    //          /
    //         4
    //        /
    //       5
    void Test2()
    {
        BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1);
        BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2);
        BinaryTreeNode* pNode3 = CreateBinaryTreeNode(3);
        BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4);
        BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5);
    
        ConnectTreeNodes(pNode1, pNode2, nullptr);
        ConnectTreeNodes(pNode2, pNode3, nullptr);
        ConnectTreeNodes(pNode3, pNode4, nullptr);
        ConnectTreeNodes(pNode4, pNode5, nullptr);
    
        Test("Test2", pNode1, 5);
    
        DestroyTree(pNode1);
    }
    
    // 1
    //  
    //   2
    //    
    //     3
    //      
    //       4
    //        
    //         5
    void Test3()
    {
        BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1);
        BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2);
        BinaryTreeNode* pNode3 = CreateBinaryTreeNode(3);
        BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4);
        BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5);
    
        ConnectTreeNodes(pNode1, nullptr, pNode2);
        ConnectTreeNodes(pNode2, nullptr, pNode3);
        ConnectTreeNodes(pNode3, nullptr, pNode4);
        ConnectTreeNodes(pNode4, nullptr, pNode5);
    
        Test("Test3", pNode1, 5);
    
        DestroyTree(pNode1);
    }
    
    // 树中只有1个结点
    void Test4()
    {
        BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1);
        Test("Test4", pNode1, 1);
    
        DestroyTree(pNode1);
    }
    
    // 树中没有结点
    void Test5()
    {
        Test("Test5", nullptr, 0);
    }
    
    int main()
    {
        Test1();
        Test2();
        Test3();
        Test4();
        Test5();
        system("pause");
        return 0;
    }
  • 相关阅读:
    字符串和数字的相互转换
    考研_计算机网络
    修改Win+E映射
    BFS总结
    关于—— !important
    css中hack是什么
    轮播图 Swiper4.x 代码模板
    微信小程序---数组操作
    小程序-----button 分享按钮
    微信小程序从子页面退回父页面时的数据传递 wx.navigateBack()
  • 原文地址:https://www.cnblogs.com/CJT-blog/p/10540956.html
Copyright © 2020-2023  润新知