面試題55(一):二叉樹的深度
阿新 • • 發佈:2018-12-16
一、題目
輸入一棵二叉樹的根結點,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。
二、關鍵
三、解釋
四、程式碼
#include <cstdio> #include "..\Utilities\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.\n", testName); else printf("%s FAILED.\n", 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; }