平衡二叉樹
判斷平衡二叉樹就是要比較左右子樹的高度差枣宫,在計(jì)算節(jié)點(diǎn)的高度時(shí),如果高度差大于1吃环,那么將該結(jié)果返回給父節(jié)點(diǎn)
class Solution {
public boolean isBalanced(TreeNode root) {
return getHeight(root) != -1;
}
private int getHeight(TreeNode node) {
if (node == null) {
return 0;
}
int leftHeight = getHeight(node.left);
int rightHeight = getHeight(node.right);
// 如果子節(jié)點(diǎn)不是平衡二叉樹也颤,那么返回給父節(jié)點(diǎn)
if (leftHeight == -1 || rightHeight == -1) {
return -1;
}
if (Math.abs(leftHeight - rightHeight) > 1) {
return -1;
}
return Math.max(leftHeight,rightHeight) + 1;
}
}
二叉樹的所有路徑
257. 二叉樹的所有路徑 - 力扣(LeetCode)
每次遍歷到一個(gè)節(jié)點(diǎn)時(shí),就將字符串更新郁轻,直到遍歷到葉子節(jié)點(diǎn)為止翅娶,雖然代碼簡(jiǎn)介,但是思路不好想
class Solution {
// 作為一個(gè)屬性
List<String> result = new ArrayList<>();
public List<String> binaryTreePaths(TreeNode root) {
deal(root, "");
return result;
}
private void deal(TreeNode node, String s) {
if (node == null) {
return;
}
if (node.left == null && node.right == null) {
result.add(new StringBuilder(s).append(node.val).toString());
return;
}
String tmp = new StringBuilder(s).append(node.val).append("->").toString();
deal(node.left, tmp);
deal(node.right, tmp);
}
}
左葉子之和
404. 左葉子之和 - 力扣(LeetCode)
本題要注意左葉子節(jié)點(diǎn)的定義好唯,需要是葉子節(jié)點(diǎn)竭沫,并且是父節(jié)點(diǎn)的左節(jié)點(diǎn),所以判斷條件有3個(gè)
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
if (root == null) {
return 0;
}
int leftValue = sumOfLeftLeaves(root.left);
int rightValue = sumOfLeftLeaves(root.right);
int midValue = 0;
// 根據(jù)葉子節(jié)點(diǎn)的父節(jié)點(diǎn)判斷
if (root.left != null && root.left.left == null && root.left.right == null) {
midValue = root.left.val;
}
int sum = midValue + leftValue + rightValue;
return sum;
}
}