52.二元树的深度(树)。

来源:互联网 发布:js在线压缩工具 编辑:程序博客网 时间:2024/06/07 16:00
52.二元树的深度(树)。
题目:输入一棵二元树的根结点,求该树的深度。
从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
例如:输入二元树:
                                            10
                                          /     /
                                        6        14
                                      /         /   /
                                    4         12     16
输出该树的深度3。
二元树的结点定义如下:
struct SBinaryTreeNode // a node of the binary tree
{
      int               m_nValue; // value of node
      SBinaryTreeNode  *m_pLeft;  // left child of node
      SBinaryTreeNode  *m_pRight; // right child of node
};

分析:这道题本质上还是考查二元树的遍历。


//coder:LEE 20120330#include<iostream>#include<CASSERT>using namespace std;struct SBinaryTreeNode   {int m_nValue;SBinaryTreeNode * m_pLeft;SBinaryTreeNode  * m_pRight;};void AddNode(SBinaryTreeNode  *& root,int n){if (!root){root=(SBinaryTreeNode  *)malloc(sizeof(SBinaryTreeNode  ));root->m_nValue=n;root->m_pLeft=NULL;root->m_pRight=NULL;return;}if(n<root->m_nValue)AddNode(root->m_pLeft,n);elseAddNode(root->m_pRight,n);}void Traverse(SBinaryTreeNode  * root){if(!root)return;Traverse((root->m_pLeft));cout<<root->m_nValue<<"  ";Traverse(root->m_pRight);}int ComputeDepthOfBiTree(SBinaryTreeNode * root){if(root==NULL)return 0;int LeftDepth=ComputeDepthOfBiTree(root->m_pLeft);int RightDepth=ComputeDepthOfBiTree(root->m_pRight);return LeftDepth>RightDepth?LeftDepth+1:RightDepth+1; }int main(){SBinaryTreeNode  * root=NULL;AddNode(root,8);AddNode(root,6);AddNode(root,10);AddNode(root,5);AddNode(root,7);AddNode(root,9);AddNode(root,11);AddNode(root,12);Traverse(root);cout<<endl;cout<<ComputeDepthOfBiTree(root);return 0;}