Day13 二叉树part03| LeetCode 110.平衡二叉树,二叉树的所有路径,左叶子之和,完全二叉树的节点个数

110.平衡二叉树

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. 二叉树的所有路径

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.左叶子之和

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.完全二叉树的节点个数

222. 完全二叉树的节点个数

 class Solution {
        public int countNodes(TreeNode root) {
            if(root==null)return 0;
        return countNodes(root.left)+countNodes(root.right)+1;
        }

    }

posted on 2024-09-11 21:53  FreeDrama  阅读(13)  评论(0)    收藏  举报

导航