1. 程式人生 > >java實現遞迴和非遞迴求二叉樹深度

java實現遞迴和非遞迴求二叉樹深度

一.遞迴實現,深度優先遍歷二叉樹

 public int dfs(TreeNode root){
        if(null==root){
            return 0;
        }
        int leftLength=dfs(root.left)+1;
        int rightLength=dfs(root.right)+1;

        return leftLength>rightLength?leftLength:rightLength;
    }

二.非遞迴實現,藉助輔助資料結構佇列,廣度優先遍歷二叉樹

 public int getTreeHeight(TreeNode root){
        if(null==root){
            return 0;
        }
        ArrayDeque<TreeNode> queue=new ArrayDeque<TreeNode>();
        int height=0;
        queue.add(root);
        while(!queue.isEmpty()){
            int size=queue.size();
            for(int i=0;i<size;i++){
                TreeNode node=queue.removeFirst();
                if(null!=node.left){
                    queue.add(node.left);
                }
                if(null!=node.right){
                    queue.add(node.right);
                }
            }
            height++;
        }
        return height;
    }