找最短的到叶节点的长度:
一考虑广度优先搜索(使用队列,不用 recursive)
class Solution { public: int minDepth(TreeNode* root) { if(!root) return 0; queue<TreeNode*> q; q.push(root); int minheight=0; bool o=false; while(!q.empty()) { minheight++; int count=q.size(); cout<<count<<endl; cout<<(q.front())->val<<endl; for(int i=0;i<count;i++) { TreeNode* l=q.front(); cout<<l->val<<endl; q.pop(); if((l->right==NULL)&&(l->left==NULL)) return minheight; if(l->right) q.push(l->right); if(l->left) q.push(l->left); } } } };
使用递归形式
class Solution { public: int minDepth(TreeNode* root) { if (root == NULL) return 0; if (root-> left == NULL && root->right == NULL) return 1;//只有同时没有左节点和右节点才为叶子节点 if (root->left == NULL) return 1 + minDepth(root->right); else if (root->right == NULL) return 1 + minDepth(root->left); else return 1 + min (minDepth(root->left),minDepth(root->right)); //有左节点,和右节点,加1 } };