代码随想录day17
判断一个二叉树是否为平衡二叉树:
本质上是判断二叉树上的每个节点的左右子树高度差的绝对值不超过1
二叉树节点的高度:该节点到叶子节点的最长简单路径的条数
class Solution {
public boolean isBalanced ( TreeNode root) {
return getHeight ( root) != - 1 ;
}
private int getHeight ( TreeNode root) {
if ( root == null ) {
return 0 ;
}
int left = getHeight ( root. left) ;
if ( left == - 1 ) {
return - 1 ;
}
int right = getHeight ( root. right) ;
if ( right == - 1 ) {
return - 1 ;
}
if ( Math . abs ( left - right) > 1 ) {
return - 1 ;
}
return Math . max ( left, right) + 1 ;
}
}
class Solution {
public List < String > binaryTreePaths ( TreeNode root) {
List < String > res = new ArrayList < > ( ) ;
List < Integer > path = new ArrayList < > ( ) ;
if ( root == null ) {
return res;
}
traversal ( root, path, res) ;
return res;
}
private void traversal ( TreeNode root, List < Integer > path, List < String > res) {
path. add ( root. val) ;
if ( root. left == null && root. right == null ) {
StringBuilder sb = new StringBuilder ( ) ;
for ( int i = 0 ; i< path. size ( ) - 1 ; i++ ) {
sb. append ( path. get ( i) ) . append ( "->" ) ;
}
sb. append ( path. get ( path. size ( ) - 1 ) ) ;
res. add ( sb. toString ( ) ) ;
return ;
}
if ( root. left != null ) {
traversal ( root. left, path, res) ;
path. remove ( path. size ( ) - 1 ) ;
}
if ( root. right != null ) {
traversal ( root. right, path, res) ;
path. remove ( path. size ( ) - 1 ) ;
}
}
}
此题重点在于我们要知道什么是左叶子
首先它是叶子节点所以它的左右孩子均为空
其次它的父节点的左叶子节点不为空则称它为左叶子节点
用代码表示为:
if(root.left != null && root.left.left == null && root.left.right == null)
class Solution {
public int sumOfLeftLeaves ( TreeNode root) {
if ( root == null ) {
return 0 ;
}
int left = sumOfLeftLeaves ( root. left) ;
int right = sumOfLeftLeaves ( root. right) ;
int num = 0 ;
if ( root. left != null && root. left. left == null && root. left. right == null ) {
num = root. left. val;
}
int sum = num + left + right;
return sum;
}
}