zoukankan      html  css  js  c++  java
  • 算法练习之二叉树的最大深度,二叉树的层次遍历 II

    1.二叉树的最大深度

    给定一个二叉树,找出其最大深度。

    二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

    说明: 叶子节点是指没有子节点的节点。

    示例:
    给定二叉树 [3,9,20,null,null,15,7]

        3
       / 
      9  20
        /  
       15   7

    返回它的最大深度 3 。

    java

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public int maxDepth(TreeNode root) {
            if(root==null) return 0;
            int left = maxDepth(root.left)+1;
            int right = maxDepth(root.right)+1;
            int max = left>right?left:right;
            return max;
        }
    }

    php

    /**
     * Definition for a binary tree node.
     * class TreeNode {
     *     public $val = null;
     *     public $left = null;
     *     public $right = null;
     *     function __construct($value) { $this->val = $value; }
     * }
     */
    class Solution {
    
        /**
         * @param TreeNode $root
         * @return Integer
         */
        function maxDepth($root) {
            if($root == NULL) return 0;
            $left = $this->maxDepth($root->left)+1;
            $right = $this->maxDepth($root->right)+1;
            $max = max($left,$right);
            return $max;
        }
    }

    简化

    /**
     * Definition for a binary tree node.
     * class TreeNode {
     *     public $val = null;
     *     public $left = null;
     *     public $right = null;
     *     function __construct($value) { $this->val = $value; }
     * }
     */
    class Solution {
    
        /**
         * @param TreeNode $root
         * @return Integer
         */
        function maxDepth($root) {
            return $root == NULL ? 0 : max($this->maxDepth($root->left), $this->maxDepth($root->right)) + 1;
        }
    }

    2.二叉树的层次遍历 II

    给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

    例如:
    给定二叉树 [3,9,20,null,null,15,7],
    
        3
       / 
      9  20
        /  
       15   7
    返回其自底向上的层次遍历为:
    
    [
      [15,7],
      [9,20],
      [3]
    ]

    java

    class Solution {
        public List<List<Integer>> levelOrderBottom(TreeNode root) {
    
            List<List<Integer>> lists = new ArrayList<>();
            if(root==null) new ArrayList<>();
            func(lists,root,0);
            for(int i=0,j=lists.size()-1;i<j;i++,j--){
                List<Integer> tmp = lists.get(i);
                lists.set(i,lists.get(j));
                lists.set(j,tmp);
            }
            return lists;
        }
    
        private void func(List<List<Integer>> lists,TreeNode root,int level){
    
            if(root==null) return;
            if(lists.size()==level){
                List<Integer> tmp = new ArrayList<>();
                tmp.add(root.val);
                lists.add(tmp);
            }else{
                lists.get(level).add(root.val);
            }
            func(lists,root.left,level+1);
            func(lists,root.right,level+1);
        }
    }

    TreeNode 

    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
    
        TreeNode(int x) {
            val = x;
        }
    }

    测试

    import java.util.List;
    
    public class Main {
        public static void main(String[] args) {
            Solution ss = new Solution();
            TreeNode root = new TreeNode(3);
    
            TreeNode a1 = new TreeNode(9);
            TreeNode a2 = new TreeNode(20);
            root.left = a1;
            root.right = a2;
    
            TreeNode b1 = new TreeNode(15);
            TreeNode b2 = new TreeNode(7);
            a2.left = b1;
            a2.right = b2;
            List<List<Integer>> lists = ss.levelOrderBottom(root);
            System.out.print("result----"+ lists.toString());
        }
    }

     php

    class TreeNode{
        public $val   = null;
        public $left  = null;
        public $right = null;
        public function __construct($value)
        {$this->val = $value;}
    }
    
    class Solution {
    
        /**
         * @param TreeNode $root
         * @return Integer[][]
         */
        public function levelOrderBottom($root)
        {
            if (empty($root)) {
                return [];
            }
            $lists = [];
            $lists = $this->func($lists, $root, 0);
            for ($i = 0, $j = count($lists) - 1; $i < $j; $i++) {
                $tmp      = $lists[$i];
                $lists[$i] = $lists[$j];
                $lists[$j] = $tmp;
                $j--;
            }
            return $lists;
        }
    
        public function func(&$lists, $root, $level = 0)
        {
            if (empty($root)) {
                return null;
            }
    
            if (count($lists) == $level) {
                $lists[$level][]=$root->val;
            } else {
                $lists[$level][]= $root->val;
            }
            $this->func($lists, $root->left, $level + 1);
            $this->func($lists, $root->right, $level + 1);
            return $lists;
        }
    }

    测试

    //[3,9,20,null,null,15,7]
    $root = new TreeNode(3);
    
    $a1   = new TreeNode(9);
    $a2   = new TreeNode(20);
    $b1   = new TreeNode(15);
    $b2   = new TreeNode(7);
    
    $root->left  = $a1;
    $root->right = $a2;
    
    $a2->left  = $b1;
    $a2->right = $b2;
    
    $aa = new Solution();
    $rs = $aa->levelOrderBottom($root);
    var_dump(json_encode($rs));
  • 相关阅读:
    新年快乐,献上一份自己修改的WM6主题。
    做好MSSQL保卫战之xp_cmdshell
    [转载]Validation of viewstate MAC failed异常的原因及解决方法
    数字字符串转换为数字
    理解虚基类、虚函数与纯虚函数的概念
    你的卡销户了吗 - 中国移动收取滞纳金
    解决光驱门打不开的问题
    UCWEB使用之我见
    定时关闭窗口 For Windows Mobile SP/PPC
    减少SQL Server 死锁
  • 原文地址:https://www.cnblogs.com/baby123/p/10907626.html
Copyright © 2011-2022 走看看