zoukankan      html  css  js  c++  java
  • 《剑指offer》第五十五题I:二叉树的深度

    // 面试题55(一):二叉树的深度
    // 题目:输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的
    // 结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
    
    #include <cstdio>
    #include "BinaryTree.h"
    
    int TreeDepth(const BinaryTreeNode* pRoot)
    {
        if (pRoot == nullptr)
            return 0;
    
        int left = TreeDepth(pRoot->m_pLeft);
        int right = TreeDepth(pRoot->m_pRight);
    
        return (left > right) ? left + 1 : right + 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(int argc, char* argv[])
    {
        Test1();
        Test2();
        Test3();
        Test4();
        Test5();
    
        return 0;
    }
    测试代码

    分析:代码真简洁。

    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };*/
    class Solution {
    public:
        int TreeDepth(TreeNode* pRoot)
        {
            if (pRoot == nullptr)
                return 0;
            
            int left = TreeDepth(pRoot->left);
            int right = TreeDepth(pRoot->right);
            
            return (left > right) ? left + 1 : right + 1;
        }
    };
    牛客网提交代码
  • 相关阅读:
    spring整合mybatis的事物管理配置
    平庸久了,是会上瘾的
    kafka基本概念
    JMS编程模型
    aop的基本概念
    事务的隔离级别和传播行为
    IntelliJ IDEA 导入Project
    [PowerShell]列出檔案與資料夾的資訊
    [powershell]统计目录大小
    [powershell]有关IP的设置
  • 原文地址:https://www.cnblogs.com/ZSY-blog/p/12655101.html
Copyright © 2011-2022 走看看