/*******************************************************************
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;
}