38バイナリツリーの深さ

タイトル説明

入力バイナリツリーは、ツリーの深さを見つけます。ルートノードからリーフノードまでの経路ツリーを形成し、順次、ツリー内の最長パスの長さの深さ(ルート、リーフノードを含む)を通過します。

アイデア解析

  • Aは、再帰を行うには、と思いました。1+程度のサブツリー最大の高さを返します。戻り値0は、リーフノードに到達しました。
  • 2、非再帰的階層横断DOを考えます。補助キューは、ヘッドノードへのキューは、キューが空のリストチームノードでない場合、それは空気、空気が継続しているか否かが判断され、左右の子ノードは、空のキュー・サイクルではありません。
    注:左と右の子ノードを分析すると再入国キューが空ではないかもしれません。だから私の最後の文言は、高度が必要になります-1。
    注:レベルを横断し、あなたが高さを見つけることができ、ノード数も、どのように多くの層を依頼することができます。

コードの実装

/**
 * 递归版本
 *
 * @param root
 * @return
 */
public static int treeDepth1(TreeNode root) {
    if (root == null) {
        return 0;
    }

    return 1 + Math.max(treeDepth1(root.left), treeDepth1(root.right));
}

/**
 * 非递归方法,用层次遍历获得树的高度
 *
 * @param root
 * @return
 */
public static int treeDepth2(TreeNode root) {
    if (root == null) {
        return 0;
    }
    Queue<TreeNode> queue = new LinkedList<>();
    int height = 0;
    queue.offer(root);
    while (!queue.isEmpty()) {
        int count = queue.size();
        while (count-- > 0) {
            TreeNode node = queue.poll();
            if (node == null) {
                continue;
            }
            queue.offer(node.left);
            queue.offer(node.right);
        }
        height++;
    }
    return height - 1;
}
公開された118元の記事 ウォンの賞賛8 ビュー3721

おすすめ

転載: blog.csdn.net/qq_34761012/article/details/104442637