数据结构之二叉树深度

来源:互联网 发布:那些是java future 编辑:程序博客网 时间:2024/04/28 04:52

原文地址:
http://www.cnblogs.com/xwdreamer/archive/2012/10/13/2722536.html

面试题:二叉树的深度
题目:输入一棵二叉树的根节点,求该树的深度。从根节点到叶子结点一次经过的结点形成树的一条路径,最长路径的长度为树的深度。根节点的深度为1。

解体思路:如果根节点为空,则深度为0,返回0,递归的出口如果根节点不为空,那么深度至少为1,然后我们求他们左右子树的深度,比较左右子树深度值,返回较大的那一个通过递归调用
#include <iostream>#include <stdlib.h>using namespace std;struct BinaryTreeNode{    int m_nValue;    BinaryTreeNode* m_pLeft;    BinaryTreeNode* m_pRight;};//创建二叉树节点BinaryTreeNode* CreateBinaryTreeNode(int value){    BinaryTreeNode* pNode=new BinaryTreeNode();    pNode->m_nValue=value;    pNode->m_pLeft=NULL;    pNode->m_pRight=NULL;    return pNode;}//连接二叉树节点void ConnectTreeNodes(BinaryTreeNode* pParent,BinaryTreeNode* pLeft,BinaryTreeNode* pRight){    if(pParent!=NULL)    {        pParent->m_pLeft=pLeft;        pParent->m_pRight=pRight;    }}//求二叉树深度int TreeDepth(BinaryTreeNode* pRoot){    ////如果pRoot为NULL,则深度为0,这也是递归的返回条件    if(pRoot==NULL)    {        return 0;    }    //如果pRoot不为NULL,那么深度至少为1,所以left和right=1    int left=1;    int right=1;    //求出左右子树的深度    left+=TreeDepth(pRoot->m_pLeft);    right+=TreeDepth(pRoot->m_pRight);    //返回是深度比较大的一个    return left>right?left:right;}int main(){//            1//         /      \//        2        3//       /\         \//      4  5         6//           ///        7    //创建树结点    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, NULL,   pNode6);    ConnectTreeNodes(pNode5, pNode7,  NULL );    int depth=TreeDepth(pNode1);    cout<<depth<<endl;    system("pause");    return 0;}
0 0
原创粉丝点击