タイトル説明
入力バイナリツリーは、ツリーの深さを見つけます。ルートノードからリーフノードまでの経路ツリーを形成し、順次、ツリー内の最長パスの長さの深さ(ルート、リーフノードを含む)を通過します。
アイデア解析
- 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;
}