剑指offer-求二叉树的树深

/*******************************************************************
Copyright(c) 2016, Tyrone Li
All rights reserved.
*******************************************************************/
// 作者:TyroneLi
//
 
/*
Q:
    二叉树得蛇毒:
        输入一颗二叉树得根节点,求该树得深度,从根节点到叶子节点依次经过得结点(包含
        根节点和叶子节点)形成树得一条路径,最长路径得长度称为该树得深度。
S:
    这样理解树深度:
        如果一棵树只有一个结点,那么它的深度是1.如果根节点只有左子树而没有右子树,那么
        树的深度应该是左子树深度加1;同样如果根节点只有右子树而没有左子树,那么树的深度
        是右子树得深渡加1;如果既有左子树也有右子树,那么树的深度就是两者中最大值加1.
*/

#include "../utils/BinaryTree.h"
#include <iostream>
#include <cstdio>
#include <cstdlib>

int treeDepth(BinaryTreeNode*T)
{
    if(T == nullptr)
        return 0;
    
    int left = treeDepth(T->m_pLeft);
    int right = treeDepth(T->m_pRight);
    return (left>right)?(left+1):(right+1);
}

void test_1()
{
    BinaryTreeNode*T1 = createBinaryTreeNode(1);
    BinaryTreeNode*T2 = createBinaryTreeNode(2);
    BinaryTreeNode*T3 = createBinaryTreeNode(3);
    BinaryTreeNode*T4 = createBinaryTreeNode(4);
    BinaryTreeNode*T5 = createBinaryTreeNode(5);
    BinaryTreeNode*T6 = createBinaryTreeNode(6);
    BinaryTreeNode*T7 = createBinaryTreeNode(7);

    connectTreeNodes(T1, T2, T3);
    connectTreeNodes(T2, T4, T5);
    connectTreeNodes(T3, nullptr, T6);
    connectTreeNodes(T5, T7, nullptr);
    printTreePreOrder(T1);

    std::cout << std::endl << "get tree depth : " << treeDepth(T1) << std::endl;
}

void test_2()
{
    BinaryTreeNode*T1 = createBinaryTreeNode(1);
    BinaryTreeNode*T2 = createBinaryTreeNode(2);
    BinaryTreeNode*T3 = createBinaryTreeNode(3);
    BinaryTreeNode*T4 = createBinaryTreeNode(4);
    BinaryTreeNode*T5 = createBinaryTreeNode(5);
    BinaryTreeNode*T6 = createBinaryTreeNode(6);
    BinaryTreeNode*T7 = createBinaryTreeNode(7);

    connectTreeNodes(T1, T2, nullptr);
    connectTreeNodes(T2, T3, nullptr);
    connectTreeNodes(T3, T4, nullptr);
    connectTreeNodes(T4, T5, nullptr);
    connectTreeNodes(T5, T6, nullptr);
    printTreePreOrder(T1);

    std::cout << std::endl << "get tree depth : " << treeDepth(T1) << std::endl;
}

void test_3()
{
    BinaryTreeNode*T1 = createBinaryTreeNode(1);
    BinaryTreeNode*T2 = createBinaryTreeNode(2);
    BinaryTreeNode*T3 = createBinaryTreeNode(3);
    BinaryTreeNode*T4 = createBinaryTreeNode(4);
    BinaryTreeNode*T5 = createBinaryTreeNode(5);
    BinaryTreeNode*T6 = createBinaryTreeNode(6);
    BinaryTreeNode*T7 = createBinaryTreeNode(7);

    connectTreeNodes(T1, nullptr, T2);
    connectTreeNodes(T2, nullptr, T3);
    connectTreeNodes(T3, nullptr, T4);
    connectTreeNodes(T4, nullptr, T5);
    connectTreeNodes(T5, nullptr, T6);
    printTreePreOrder(T1);

    std::cout << std::endl << "get tree depth : " << treeDepth(T1) << std::endl;
}

void test_4()
{
    BinaryTreeNode*T1 = createBinaryTreeNode(1);

    connectTreeNodes(T1, nullptr, nullptr);
    printTreePreOrder(T1);

    std::cout << std::endl << "get tree depth : " << treeDepth(T1) << std::endl;
}

void test_5()
{
    BinaryTreeNode*T1 = nullptr;

    connectTreeNodes(T1, nullptr, nullptr);
    printTreePreOrder(T1);

    std::cout << std::endl << "get tree depth : " << treeDepth(T1) << std::endl;
}

void test_treeDepth()
{
    test_1();
    test_2();
    test_3();
    test_4();
    test_5();
}

int main(int argc, char**argv)
{

    test_treeDepth();

    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章