当前位置:编程学习 > C/C++ >>

Minimum Depth of Binary Tree

Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
cpp code : 暴力求解,递归到每一个叶子节点,记录深度,然后维护一个最小的值即可。此算法效率不高,若存在一个叶子节点很矮,而其他叶子节点很深的情况,需要遍历到所有深的结点。
 
 
/** 
 * Definition for binary tree 
 * struct TreeNode { 
 *     int val; 
 *     TreeNode *left; 
 *     TreeNode *right; 
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} 
 * }; 
 */  
class Solution {  
public:  
    int minDepth(TreeNode *root) {  
        // Note: The Solution object is instantiated only once and is reused by each test case.  
        if(root == NULL)  
            return 0;  
        int depth = INT_MAX;  
        int tmp = 1;  
        recursion(root, tmp, depth);  
        return depth;  
    }  
    void recursion(TreeNode *root, int tmp, int &depth)  
    {  
        if(root->left == NULL && root->right == NULL)  
        {  
            if(tmp < depth)  
                depth = tmp;  
            return ;  
        }  
        if(root->left)  
        {  
            recursion(root->left, tmp + 1, depth);  
        }  
        if(root->right)  
        {  
            recursion(root->right, tmp + 1, depth);  
        }  
    }  
};  

 

 
比较高效的做法是:使用层序遍历二叉树,遇到叶子节点即返回深度。
java code :
 
/** 
 * Definition for binary tree 
 * public class TreeNode { 
 *     int val; 
 *     TreeNode left; 
 *     TreeNode right; 
 *     TreeNode(int x) { val = x; } 
 * } 
 */  
public class Solution {  
    public int minDepth(TreeNode root) {  
        // Note: The Solution object is instantiated only once and is reused by each test case.  
        if(root == null)  
            return 0;  
        Queue<TreeNode> que = new LinkedList<TreeNode>();  
        que.add(root);  
        que.add(null);  
        int level = 1;  
        while(true)  
        {  
            TreeNode cur = que.poll();  
            if(que.isEmpty())  
                break;  
            if(cur == null)  
            {  
                que.add(null);  
                level++;  
                continue;  
            }  
            if(cur.left == null && cur.right == null)  
            {  
                return level;  
            }  
            if(cur.left != null)  
                que.add(cur.left);  
            if(cur.right != null)  
                que.add(cur.right);  
        }  
        return level;  
          
    }  
      
}  

 

 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,