zoukankan      html  css  js  c++  java
  • 二叉树

    练习:求根到叶子节点数字之和
    给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。
    每条从根节点到叶节点的路径都代表一个数字:

    例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。
    计算从根节点到叶节点生成的 所有数字之和 。

    叶节点 是指没有子节点的节点。

    class Solution {
        static int sum;
        public int sumNumbers(TreeNode root){
            sum=0;
          sumNumbers1(0,root);
           return sum;
        }
        public static void sumNumbers1(int val,TreeNode root) {
            
            if(root==null)
                return ;
            int k=(val*10+root.val);
            if(root.left==null&&root.right==null){
                  sum=sum+k;
            }
           
            sumNumbers1(k,root.left);
             sumNumbers1(k,root.right);
            
        }
    }
    

      妈耶,破防了

    练习:二叉树的最近公共祖先

    练习:从前序与中序遍历序列构造二叉树

    class Solution {
        public TreeNode buildTree(int[] preorder, int[] inorder) {
            if(preorder.length==0&&inorder.length==0){
                return null;
            }
            TreeNode root=new TreeNode(preorder[0]);
            for(int i=0;i<inorder.length;i++){
                if(preorder[0]==inorder[i]){
                    root.left=buildTree(Arrays.copyOfRange(preorder,1,i+1),Arrays.copyOfRange(inorder,0,i));
                   root.right=buildTree(Arrays.copyOfRange(preorder,i+1,preorder.length),Arrays.copyOfRange(inorder,i+1,inorder.length));
                    break;
                }
                
            }
          

     

    练习:从中序与后序遍历序列构造二叉

    class Solution {
        public TreeNode buildTree(int[] inorder, int[] postorder) {
            if(inorder.length==0&&postorder.length==0){
                return null;
            }
            TreeNode root=new TreeNode(postorder[postorder.length-1]);
            for(int i=0;i<inorder.length;i++){
                if(inorder[i]==postorder[postorder.length-1]){
                   root.left=buildTree(Arrays.copyOfRange(inorder,0,i+1),Arrays.copyOfRange(postorder,postorder.length-i-1,postorder.length));
                   root.right=buildTree(Arrays.copyOfRange(inorder,i+2,inorder.length),Arrays.copyOfRange(postorder,0,postorder.length-1));
                   break;
                }
               
            }
    return root;
        }
    }
    超时了,优化开始了。
    超出时间限制.....
    不知道怎么优化了,,,,查了一下,好像是用栈或者hash,下次填坑。

    练习:前序遍历构造二叉搜索树

  • 相关阅读:
    typeof的用法
    新建一个express工程,node app无反应
    搜索引擎-倒排索引基础知识
    搭建Hadoop2.6.0+Eclipse开发调试环境(以及log4j.properties的配置)
    hadoop下远程调试方法
    回调函数透彻理解Java
    Maven 手动添加 JAR 包到本地仓库
    Hbase rowkey热点问题
    Hadoop 2.2 & HBase 0.96 Maven 依赖总结
    通过Java Api与HBase交互
  • 原文地址:https://www.cnblogs.com/orange0/p/15505960.html
Copyright © 2011-2022 走看看