日常演算法題(四)
阿新 • • 發佈:2018-12-20
1.二叉樹的最小深度
給定二叉樹,找到它的最小深度。
最小深度是沿從根節點到最近的葉節點的最短路徑上的節點數。
注意: 葉子是沒有子節點的節點。
例:
給定二叉樹[3,9,20,null,null,15,7], 返回其最小深度= 2。
想法:使用bfs直接遍歷,找到根和子葉節點最短路徑的節點數,且該子節點沒有左孩子節點也無右孩子節點
程式碼:
public int minDepth(TreeNode root) { if(root == null) return 0; List<TreeNode> list = new LinkedList<>(); list.add(root); int level = 1; while(!list.isEmpty()){ int len = list.size(); for(int i = 0;i<len;i++){ TreeNode node = list.remove(0); if(node.left == null && node.right == null) return level; if(node.left != null) list.add(node.left); if(node.right != null) list.add(node.right); } level++; } return 0;
2.向樹中新增一行:
給定二叉樹的根,然後是值v和深度d,您需要v在給定深度新增一行具有值的節點d。根節點位於深度1。
該新增規則是:給定一個正整數的深度d,對於每一個NOT NULL樹節點N的深度d-1,建立兩個樹節點以價值v為N’s左子樹的根和右子樹的根。和N’s 原來的左子樹應該是新的左子樹的根的左子樹,其原有的右子樹應該是新的右子樹的根的右子樹。如果depth d為1表示根本沒有深度d-1,則建立一個值為v的樹節點作為整個原始樹的新根,並且原始樹是新根的左子樹。
注意: 給定的d在範圍[1,給定樹的最大深度+ 1]。 給定的二叉樹至少有一個樹節點。