110.平衡二叉树
- 定义:左右子树的高度差的绝对值不超过1
- 深度:从上到下查——> 前序遍历(中左右)
- 高度:从下到上查——> 后序遍历(左右中)
class Solution {
public boolean isBalanced(TreeNode root) {
if(getHeight(root)==-1)
return false;
return true;
}
int getHeight(TreeNode node)
{
if(node==null) return 0;
int leftHeight=getHeight(node.left);
if(leftHeight==-1) return -1;
int rightHeight=getHeight(node.right);
if(rightHeight==-1) return -1;
if(Math.abs(leftHeight-rightHeight)>1)//高度差大于1,不是平衡二叉树
{
return -1;
}
return Math.max(leftHeight,rightHeight)+1;//向上传递,高度加一
}
}
257. 二叉树的所有路径
class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> result=new ArrayList<>();
if(root==null) return result;
List<Integer> path=new ArrayList<>();
traversal(root,path,result);
return result;
}
private void traversal(TreeNode root, List<Integer> path, List<String> res)
{
path.add(root.val);//中
//叶子节点
if(root.left==null&&root.right==null)
{
StringBuilder s=new StringBuilder();
for(int i=0;i<path.size()-1;i++)
{
s.append(path.get(i)).append("->");
}
s.append(path.get(path.size()-1));
res.add(s.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);
}
}
}
404.左叶子之和
- 左叶子
- 叶子节点
- 左孩子
class Solution {
public int sumOfLeftLeaves(TreeNode root) {
return travel(root);
}
private int travel(TreeNode node)
{
if(node==null) return 0;
int leftnumber= travel(node.left);
int midVal=0;
if(node.left!=null&&node.left.left==null&&node.left.right==null)
{
midVal= node.left.val;
}
int rightnumber= travel(node.right);
return midVal+leftnumber+rightnumber;
}
}
222.完全二叉树的节点个数
class Solution {
public int countNodes(TreeNode root) {
if(root==null)return 0;
return countNodes(root.left)+countNodes(root.right)+1;
}
}
标签:node,return,part03,二叉树,path,null,root,110
From: https://www.cnblogs.com/FreeDrama/p/18409061