赞
踩
110.平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
- class Solution {
- public boolean isBalanced(TreeNode root) {
- return getHeight(root)!=-1;
- }
- private int getHeight(TreeNode root){
- if(root==null){
- return 0;
- }
- int leftHeight = getHeight(root.left);
- if(leftHeight==-1){
- return -1;
- }
- int rightHeight = getHeight(root.right);
- if(rightHeight==-1){
- return -1;
- }
- if(Math.abs(leftHeight-rightHeight)>1){
- return -1;
- }
- return Math.max(leftHeight,rightHeight)+1;
-
- }
- }
后序遍历的思想
257.二叉树的所有路径
给你一个二叉树的根节点
root
,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点
- class Solution {
- public List<String> binaryTreePaths(TreeNode root) {
- List<String> res = new ArrayList<>();
- if(root==null){
- return res;
- }
- List<Integer> paths = new ArrayList<>();
- traversal(root,paths,res);
- return res;
- }
- private void traversal(TreeNode root, List<Integer> paths, List<String> res){
- paths.add(root.val);
- // 遇到叶子节点
- if(root.left==null&&root.right==null){
- StringBuilder sb = new StringBuilder();
- for(int i=0;i<paths.size()-1;i++){
- sb.append(paths.get(i)).append("->");
- }
- sb.append(paths.get(paths.size()-1));
- res.add(sb.toString());
- return;
- }
- if(root.left!=null){
- traversal(root.left,paths,res);
- paths.remove(paths.size()-1);//回溯
- }
- if(root.right!=null){
- traversal(root.right,paths,res);
- paths.remove(paths.size()-1);//回溯
- }
- }
- }
回溯的思想
404. 左叶子之和
给定二叉树的根节点
root
,返回所有左叶子之和。
- 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; // 只能通过父节点来判断子节点是不是左叶子
- if(root.left!=null&&root.left.left==null&&root.left.right==null){
- midValue = root.left.val;
- }
- return leftValue + rightValue + midValue;
- }
- }
节点A的左孩子不为空,且左孩子的左右孩子都为空(说明是叶子节点),那么A节点的左孩子为左叶子节点
需要通过父节点来判断子节点是不是叶子节点
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。