二元树的深度(树)
题目:输入一棵二元树的根结点,求该树的深度。
从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
例如:输入二元树:
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
};
题目:输入一棵二元树的根结点,求该树的深度。
从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
例如:输入二元树:
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);
- else
- AddNode(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;
- }