您的位置:首页 > 其它

【二叉树的递归】01二叉树的最小深度【Minimum Depth of Binary Tree】

2014-04-08 16:56 429 查看
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++给定一个二叉树,找出他的最小的深度。最小的深度,指的是从根节点到叶子节点的,经历的最小的节点个数。++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Givenabinarytree,finditsminimumdepth.Theminimumdepthisthenumberofnodesalongtheshortestpathfromtherootnodedowntothenearestleafnode.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

test.cpp:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include<iostream>
#include<cstdio>
#include<stack>
#include<vector>
#include<queue>
#include"BinaryTree.h"usingnamespacestd;intminDepth(TreeNode*root)
{if(root==NULL)
{
return0;
}
queue<TreeNode*>que;
que.push(root);
intcount=1;
intdepth=0;
while(!que.empty())
{
TreeNode*tmp=que.front();
que.pop();
count--;if(tmp->left==NULL&&tmp->right==NULL)
{
break;
}if(tmp->left!=NULL)
{
que.push(tmp->left);
}
if(tmp->right!=NULL)
{
que.push(tmp->right);
}
/*count等于0说明这一层遍历完了,可以depth做加一操作*/
if(count==0)
{
depth++;
count=que.size();
}
}
depth++;
returndepth;
}//树中结点含有分叉,
//8
///\
//61
///\
//92
///\
//47
intmain()
{
TreeNode*pNodeA1=CreateBinaryTreeNode(8);
TreeNode*pNodeA2=CreateBinaryTreeNode(6);
TreeNode*pNodeA3=CreateBinaryTreeNode(1);
TreeNode*pNodeA4=CreateBinaryTreeNode(9);
TreeNode*pNodeA5=CreateBinaryTreeNode(2);
TreeNode*pNodeA6=CreateBinaryTreeNode(4);
TreeNode*pNodeA7=CreateBinaryTreeNode(7);ConnectTreeNodes(pNodeA1,pNodeA2,pNodeA3);
ConnectTreeNodes(pNodeA2,pNodeA4,pNodeA5);
ConnectTreeNodes(pNodeA5,pNodeA6,pNodeA7);cout<<minDepth(pNodeA1)<<endl;DestroyTree(pNodeA1);
return0;
}
结果输出:
2BinaryTree.h:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef_BINARY_TREE_H_
#define_BINARY_TREE_H_structTreeNode
{
intval;
TreeNode*left;
TreeNode*right;
TreeNode(intx):val(x),left(NULL),right(NULL){}
};TreeNode*CreateBinaryTreeNode(intvalue);
voidConnectTreeNodes(TreeNode*pParent,
TreeNode*pLeft,TreeNode*pRight);
voidPrintTreeNode(TreeNode*pNode);
voidPrintTree(TreeNode*pRoot);
voidDestroyTree(TreeNode*pRoot);#endif/*_BINARY_TREE_H_*/
BinaryTree.cpp:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include<iostream>
#include<cstdio>
#include"BinaryTree.h"usingnamespacestd;/**
*Definitionforbinarytree
*structTreeNode{
*intval;
*TreeNode*left;
*TreeNode*right;
*TreeNode(intx):val(x),left(NULL),right(NULL){}
*};
*///创建结点
TreeNode*CreateBinaryTreeNode(intvalue)
{
TreeNode*pNode=newTreeNode(value);returnpNode;
}//连接结点
voidConnectTreeNodes(TreeNode*pParent,TreeNode*pLeft,TreeNode*pRight)
{
if(pParent!=NULL)
{
pParent->left=pLeft;
pParent->right=pRight;
}
}//打印节点内容以及左右子结点内容
voidPrintTreeNode(TreeNode*pNode)
{
if(pNode!=NULL)
{
printf("valueofthisnodeis:%d\n",pNode->val);if(pNode->left!=NULL)
printf("valueofitsleftchildis:%d.\n",pNode->left->val);
else
printf("leftchildisnull.\n");if(pNode->right!=NULL)
printf("valueofitsrightchildis:%d.\n",pNode->right->val);
else
printf("rightchildisnull.\n");
}
else
{
printf("thisnodeisnull.\n");
}printf("\n");
}//前序遍历递归方法打印结点内容
voidPrintTree(TreeNode*pRoot)
{
PrintTreeNode(pRoot);if(pRoot!=NULL)
{
if(pRoot->left!=NULL)
PrintTree(pRoot->left);if(pRoot->right!=NULL)
PrintTree(pRoot->right);
}
}voidDestroyTree(TreeNode*pRoot)
{
if(pRoot!=NULL)
{
TreeNode*pLeft=pRoot->left;
TreeNode*pRight=pRoot->right;deletepRoot;
pRoot=NULL;DestroyTree(pLeft);
DestroyTree(pRight);
}
}






                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: