【二叉树的递归】01二叉树的最小深度【Minimum Depth of Binary Tree】
2014-04-08 16:56
429 查看
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++给定一个二叉树,找出他的最小的深度。最小的深度,指的是从根节点到叶子节点的,经历的最小的节点个数。++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Givenabinarytree,finditsminimumdepth.Theminimumdepthisthenumberofnodesalongtheshortestpathfromtherootnodedowntothenearestleafnode.
结果输出:
2BinaryTree.h:
BinaryTree.cpp:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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_*/ |
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); } } |
相关文章推荐
- LeetCode OJ:Minimum Depth of Binary Tree(二叉树的最小深度)
- Leetcode Minimum Depth of Binary Tree 二叉树最小深度
- Minimum Depth of Binary Tree 二叉树的最小深度
- [LeetCode] Minimum Depth of Binary Tree 二叉树的最小深度
- 求二叉树的最小深度 Minimum Depth of Binary Tree
- Minimum Depth of Binary Tree 二叉树的最小深度
- [LeetCode 111] - 二叉树的最小深度 (Minimum Depth of Binary Tree)
- [Leetcode] The minimum depth of binary tree二叉树的最小深度
- LeetCode Minimum Depth of Binary Tree 最小深度二叉树
- Minimum Depth of Binary Tree 二叉树最小深度
- Maximum and Minimum Depth of Binary Tree 二叉树的最小最大深度 [java]
- [LeetCode-111] Minimum Depth of Binary Tree (二叉树最小深度)
- LeetCode:minimum-depth-of-binary-tree(二叉树最小深度)
- 【LeetCode-面试算法经典-Java实现】【111-Minimum Depth of Binary Tree(二叉树的最小深度)】
- [LeetCode] Minimum Depth of Binary Tree 二叉树最小深度
- LeetCode OJ 之 Minimum Depth of Binary Tree(二叉树的最小深度)
- Minimum Depth of Binary Tree 求二叉树最小高度/深度@LeetCode
- Minimum Depth of Binary Tree -- 二叉树的最小深度 DFS 加剪枝
- 【leetcode】Minimum Depth of Binary Tree 二叉树的最小深度 (JAVA)
- LeetCode:111_Minimum Depth of Binary Tree | 二叉树的最小深度 | Easy