樹的深度 遞歸非遞歸實現

樹的深度 遞歸非遞歸實現

package com.dugstudio.SwordToOffer;

import java.util.LinkedList;

/**
 * 樹的深度遞歸和非遞歸算法
 */
class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }
public class TreeDepth {
    /**
     * 遞歸
     * @param root
     * @return
     */
    public int TreeDepth1(TreeNode root){
        if(root==null)return 0;
        int left=TreeDepth1(root.left);
        int right=TreeDepth1(root.right);
        return left>right?left+1:right+1;
    }

    /**
     * 層次遍歷非遞歸
     * @param root
     * @return
     */
    public int TreeDepth2(TreeNode root){
        if(root==null)return 0;
        int high=0,nextCount=1,count=0;
        LinkedList<TreeNode>queue=new LinkedList<TreeNode>();
        queue.add(root);
        while(queue.size()!=0){
            count++;
            TreeNode node=queue.poll();
            if (node.left!=null)queue.add(node.left);
            if (node.right!=null)queue.add(node.right);
            if(count == nextCount){
                nextCount = queue.size();
                count = 0;
                high++;
            }
        }
        return high;
    }
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章