• 一道算法题目, 二行代码, Binary Tree


    June 8, 2015

    我最喜欢的一道算法题目, 二行代码. 

    编程序需要很强的逻辑思维, 多问几个为什么, 可不可以简化.想一想, 二行代码, 五分钟就可以搞定; 2015年网上大家热议的 Homebrew 的作者 Max Howell 面试

    Google 挂掉的一题, 二叉树反转, 七行代码, 相比二行代码, 情有可原!

    Problem: return the count of binary tree with only one child

    想一想, 你要写几行, 六七行, 或小于十行?

    Solution:  two lines code:

     /**

    * Great arguments:

    1. Since first line is the discussion of “node==null”, there is no need to check node!=null before the function countOneChildNode call.

    2. How to express only one child?

    case 1: left child is not null; in other words, there is a left child: node.left!=null

    case 2: right child is not null; node.right!=null)

    case 3: node has two child

    (node.left!=null) && (node.right!=null)

    case 4: node has only one child (A: left child only, B: right child only, one true, one false; left child existed != right child existed; cannot be both false or both true)

    (node.left!=null)!=(node.right!=null)

    case 5: at least one child (one child or two child)

    (node.left!=null) || (node.right!=null)

    这道题非常好, 通过这道题, 你可以如何简化代码; 如果有一个出色的程序员, 有很强的逻辑思维能力, 想到只有一个孩子, 可以表示为一句话:  (node.left!=null)!=(node.right!=null)

    */

    public static int countOneChildNode(Node node)

    {

    if(node==null) return 0;

    return (((node.left!=null)!=(node.right!=null)?1:0)+countOneChildNode(node.left)+countOneChildNode(node.right));

    }

    Github for source code:

  • 相关阅读:
    osu合集(期望dp)
    P1640 [SCOI2010]连续攻击游戏
    P2155 [SDOI2008]沙拉公主的困惑
    P3419 [POI2005]SAMToy Cars / SP688 SAM Toy Cars
    P3586 [POI2015]LOG
    P4147 玉蟾宫
    P4454 [CQOI2018]破解DH协议
    射击小游戏一02(玩家和怪物添加)
    ASCII,Unicode和UTF8
    Android中MenuInflater实例
  • 原文地址:https://www.cnblogs.com/juliachenOnSoftware/p/4697235.html
Copyright © 2020-2023  润新知