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,下次填坑。

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

  • 相关阅读:
    单网卡ADSL共享上网的设置
    单网卡ADSL共享上网的设置
    求阶乘的函数
    用递归算法求两个数的最大公约数
    编程求组合
    汉诺塔游戏
    求两个数的最小公倍数
    快排的非递归算法
    字符串匹配之通配符问题一串首尾相连的珠子(m个),有N种颜色(N《=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。
    sizeof和strlen
  • 原文地址:https://www.cnblogs.com/orange0/p/15505960.html
Copyright © 2011-2022 走看看