Blog

二叉查找树的删除操作

Content #

二叉查找树中删除节点的三种情况:

  1. 如果没有子节点,只需要将父节点中指向要删除节点的指针置为 null。比如图中删除节点 55。
  2. 如果只有一个子节点,只需子承父业。比如图中删除节点 13。
  3. 如果有两个子节点。用直接前驱(或直接后继)代替,再删除直接前驱(或直接后继)。比如图中删除节点 18。
public void delete(int data) {
  Node p = tree; // p指向要删除的节点,初始化指向根节点
  Node pp = null; // pp记录的是p的父节点
  while (p != null && p.data != data) {
    pp = p;
    if (data > p.data) p = p.right;
    else p = p.left;
  }
  if (p == null) return; // 没有找到

  // 要删除的节点有两个子节点
  if (p.left != null && p.right != null) { // 查找右子树中最小节点
    Node minP = p.right;
    Node minPP = p; // minPP表示minP的父节点
    while (minP.left != null) {
      minPP = minP;
      minP = minP.left;
    }
    p.data = minP.data; // 将minP的数据替换到p中
    p = minP; // 下面就变成了删除minP了
    pp = minPP;
  }

  // 删除节点是叶子节点或者仅有一个子节点
  Node child; // p的子节点
  if (p.left != null) child = p.left;
  else if (p.right != null) child = p.right;
  else child = null;

  if (pp == null) tree = child; // 删除的是根节点
  else if (pp.left == p) pp.left = child;
  else pp.right = child;
}

实际上,关于二叉查找树的删除操作,还有个非常简单、取巧的方法,就是单纯将要删除的节点标记为“已删除”,但是并不真正从树中将这个节点去掉。这样原本删除的节点还需要存储在内存中,比较浪费内存空间,但是删除操作就变得简单了很多。而且,这种处理方法也并没有增加插入、查找操作代码实现的难度。

...

高度、深度和层

Content #

高度(Height)、深度(Depth)、层(Level)。它们的定义是这样的:

这三个概念的定义比较容易混淆,描述起来也比较空洞。

记这几个概念,我还有一个小窍门,就是类比“高度”“深度”“层”这几个名词在生活中的含义。

在我们的生活中,“高度”这个概念,其实就是从下往上度量,比如我们要度量第 10 层楼的高度、第 13 层楼的高度,起点都是地面。所以,树这种数据结构的高度也是一样,从最底层开始计数,并且计数的起点是 0。

“深度”这个概念在生活中是从上往下度量的,比如水中鱼的深度,是从水平面开始度量的。所以,树这种数据结构的深度也是类似的,从根结点开始度量,并且计数起点也是 0。

“层数”跟深度的计算类似,不过,计数起点是 1,也就是说根节点位于第 1 层。

Viewpoints #

From #

23 | 二叉树基础(上):什么样的二叉树适合用数组来存储?

部门凝聚力与提供关键资源的能力

Content #

部门权力的来源之一在于部门凝聚力。在福特公司财务部门中存在着一些仪式、规范,比如在会议上使用高架投影机、准备预制报表、收集文章和信息等,这为公司里崭露头角的年轻管理者们提供了类似于军队训练一样的机会:传授一些具体的技巧和知识;但更重要的是,通过分享经验建立起沟通和信任的纽带。大家同心同德、协调一致地共同行动,是部门权力和影响力的重要来源。这就是为什么军队会用团体凝聚力来评估领导者,以及为什么团体体育项目教练会致力于培养统一的行动和决心的原因。

部门权力的另一个来源,则是提供关键资源的能力。比如金钱或技能,或者是解决组织性问题的能力,这两个方面的研究都已经持续了几十年。当竞争因素的紧要程度发生变化时,就会出现不同的问题,并且资金的来源也会发生改变,因此自然也就改变了权力所在的部门。加州大学伯克利分校的社会学家尼尔·弗里格斯坦(Neil Fligstein)对大公司总裁们的背景进行了研究,其结果成为这一过程的良好佐证。

大家同心同德、协调一致地共同行动,是部门权力和影响力的重要来源。

From #

权力:为什么中为某些人所拥有

找到尚未被充分开发利用的位置

Content #

我们的直觉告诉我们,对于权力之路而言,并非所有的职业平台都有相等的价值,研究结果显示这个直觉是正确的。但在选择从哪里开始创建自己的权力基础时,人们常常会犯错误。最常见的错误就是,把自己定位在组织目前的核心业务、技能或产品所在的部门中,即目前最有权势的部门中。事实证明,这并不总是一个好主意,因为在组织的核心业务中,你会遇到最有才华的竞争者和最固定死板的职业发展道路和进程。此外,今天最重要的功能或产品在将来并不一定仍然重要。

因此,如果你想迅速升迁,那么你就要找到尚未被充分开发利用的位置,在那里你可以遇到较少的阻力,参与一些在不久的将来会比今天更重要的活动,从而获得筹码并建立自己的权力基础。

From #

权力:为什么中为某些人所拥有

承认自己无知的人更容易获得提高

Content #

康奈尔大学的社会心理学家贾斯廷·克鲁格(Justin Kruger)和戴维·邓宁(David Dunning)进行了一项开创性的研究,其结果显示,那些因缺乏必要的知识而无法成功地执行任务的人,对自己的不足之处也缺乏了解。例如,有些人在语法和逻辑思维测试中的表现只比12%的人强,但他们以为自己比62%的人都强。他们不仅高估自己的表现,而且还难以区分他们答对了哪些问题,答错了哪些,也不能准确地识别他人能力的高低。

幸运的是,这个问题有一个简单的解决办法,就是:从比你更有技能、愿意告诉你真相的人那里听取建议。但令人遗憾的是,请求别人提供这样的帮助有时会让我们觉得脆弱,因为我们都不愿意承认自己在某些方面很无知,于是自我增强意识又开始作祟了。所以,具有讽刺意味的是,与那些不知道自己的不足之处,或是害怕承认它的人相比,承认自己无知的人更容易获得提高,这种情况发生在所有领域中,包括在了解企业内部的权力互动方面也是如此。正如孔子所说:“知之为知之,不知为不知,是知也。”要想有所提高,就需要与一些人分享信息,这些人是可以帮助你弥补知识上的不足的人。

From #

权力:为什么中为某些人所拥有

瓦格纳法则

Content #

社会发展是个整体,不仅包括企业和市场的发展,也包括政府的发展,相辅相成。国家越富裕,政府在国民经济中所占的比重也往往越大,而不是越小,这一现象也被称为“瓦格纳法则”。因为随着国家越来越富裕,民众对政府服务的需求会越来越多,政府在公立教育、医疗、退休金、失业保险等方面的支出都会随之增加。而随着全球化的深入,各种外来冲击也大,所以政府要加强各种“保险”功能。

另一方面,当今很多贫穷落后国家的共同点之一就是政府太弱小,可能连社会治安都维持不了,更无法为经济发展创造稳定环境。经济富裕、社会安定、政府得力是国家繁荣的三大支柱,缺一不可。

From #

置身事内

我国储蓄率的起起落落

Content #

我国储蓄率近些年的起起落落,所以还得从分析经济环境的变化入手。目前主流的解释是计划生育、政府民生支出不足、房价上涨三者的共同作用。计划生育后,人口中的小孩占比迅速下降,工作年龄人口(14—65岁)占比上升,他们是储蓄主力,所以整体储蓄率从20世纪80年代就开始上升。孩子数量减少后,“养儿防老”的功效大打折扣,父母必须增加储蓄来养老。虽然父母会对仅有的一个孩子加大培养力度,增加相关支出尤其是教育支出,但从整体来看,孩子数量的减少还是降低了育儿支出,增加了居民储蓄。21世纪初,独生子女们开始陆续走上工作岗位,而随着城市化大潮、商品房改革和房价上涨,他们不仅要攒钱买房、结婚、培养下一代,还要开始分担多位父母甚至祖父母的养老和医疗支出,储蓄率于是再次攀升。

这一过程中的几个要素,都与地方政府有关。首先是房价上涨,这与地方政府以“土地财政”和“土地金融”推动城市化的模式密切相关。在那些土地供应受限和房价上涨快的地区,居民要存钱付首付、还按揭,储蓄率自然上升,消费下降。虽然房价上涨会增加有房者的财富,理论上可能刺激消费,降低储蓄,但大多数房主只有一套房,变现能力有限,消费水平主要还是受制于收入,房价上升的“财富效应”并不明显。所以整体上看,房价上升拉低了消费,提高了储蓄。

其次,地方政府“重土地轻人”的发展模式将大量资源用在了基础设施建设和招商引资上,民生支出比如公立教育和卫生支出相对不足。而且教育和医疗等领域由于体制原因,市场化供给受限,市场化服务价格偏高,所以家庭需要提高储蓄以应对相关支出。这也造成了一个比较独特的现象:我国老年人的储蓄率偏高。一般来讲,人在年轻时储蓄,年老时花钱,因此老年人储蓄率一般偏低。但我国老人的储蓄率也很高,因为要补贴儿女的住房支出和第三代的教育费用,还有自身的医疗费用等。此外,地方政府常年按照户籍人口规模来规划公共服务供给,满足不了没有户籍的常住人口的需要。这些人难以把妻儿老小接到身边安心生活,因此在耐用品消费、住房和教育消费等方面都偏低。他们提高了储蓄,把钱寄回了外地家里。这些外来人口数量庞大,也推高了整体储蓄率。

From #

置身事内

量化宽松

Content #

“量化宽松”,即央行增发货币来买入各类资产,把货币注入经济,这是金融危机后发达国家的主流做法。在危机中,很多人变卖资产偿债,资产市价大跌,连锁反应后果严重。央行出手买入这些资产,可以托住资产价格,同时为经济注入流动性,让大家有钱还债,缓解债务压力。从记账角度看,增发的货币算央行负债,所以“量化宽松”不过是把其他部门的负债转移到了央行身上,央行自身的资产负债规模会迅速膨胀。但只要这些债务以本国货币计价,理论上央行可以无限印钱,想接手多少就接手多少。这种做法不一定会推高通货膨胀,因为其他经济部门受债务所困,有了钱都在还债,没有增加支出,也就没给物价造成压力。欧美日在2008年全球金融危机之后都搞了大规模“量化宽松”,都没有出现通货膨胀。

“量化宽松”的主要问题是难以把增发的货币转到穷人手中,因此难以刺激消费支出,还会拉大贫富差距。央行“发钱”的方式是购买各种金融资产,所以会推高资产价格,受益的是资产所有者,也就是相对富裕的人。2008年全球金融危机之后,美国“零利率”和“量化宽松”维持了好些年,股市大涨,房价也反弹回危机前的水平,但底层百姓并没得到什么实惠,房子在危机中已经没了,手里也没多少股票,眼睁睁看着富人财富屡创新高,非常不满。这种不满情绪的高涨对政局的影响也从选举上反映了出来。2020年新冠肺炎疫情在美国暴发后,美联储再次开闸放水,资产负债表规模在3个月内扩张了六成以上,而随后的经济反弹被戏称为“K形反弹”:富人往上,穷人向下。

From #

置身事内

影子银行业务

Content #

所谓“影子银行”,就是类似银行的信贷业务,却不在银行的资产负债表中,不受银行监管规则的约束。银行是金融体系核心,规模大,杠杆高,又涉及千家万户的储蓄,牵一发动全身,所以受严格监管。若某房地产企业愿意用10%的利息借钱,银行想借,但我国严格限制银行给房企的贷款量,怎么办?银行可以卖给老百姓一个理财产品,利息5%,再把筹来的钱委托给信托公司,让信托公司把钱借给房企。在这笔“银信合作”业务中,发行的理财产品不算银行储蓄,委托给信托公司的投资不算银行贷款,所以这笔“表外业务”就绕开了对银行的监管,是一种“影子银行”业务。

有借钱需求的公司很多,愿意买银行理财产品的老百姓也很多,所以“影子银行”风生水起。相关的监管措施效果有限,往往是“按下葫芦起了瓢”。限制了“银信合作”业务,“银证信合作”业务又兴起:银行把钱委托给券商的资管计划,再让券商委托给信托公司把钱借给企业。管来管去,银行的钱到处跑,渠道越拉越长,滋润着中间各类资管行业欣欣向荣,整个金融业规模越滚越大。21世纪初,金融业增加值占GDP的比重大约在4%左右,而2015—2019年平均达到了8%,相当于美国在全球金融危机前的水平。但美国的资本市场是汇聚了全世界的资金后才达到这个规模,我国的资本市场尚未完全开放,金融业规模显然过大了。资金在金融系统内转来转去,多转一道就多一道费用,利息就又高了一点,等转到实体企业手中的时候,利息已经变得非常高,助推了各种投机行为和经济“脱实向虚”。此外,银行理财产品虽然表面上不在银行资产负债表中,银行既不保本也不保息,但老百姓认为银行要负责,而银行也确实为出问题的产品兜过底。这种刚性兑付的压力加大了银行和金融机构的风险。

From #

置身事内

银根连着地根

Content #

如果优良的抵押物(住房和土地)越来越多,或者有政府信用担保的企业越来越多,那银行就有动力不断扩大信贷规模。在我国这样一个银行主导的金融体系中,地方融资平台能抵押的土地增加、涌入城市买房的人增加、地方政府的隐性担保增加等,都会从需求端刺激信贷规模的扩张。所以商业银行的信贷扩张,固然离不开宽松的货币环境,但也同样离不开信贷需求的扩张,离不开地方政府的土地金融和房地产繁荣,此所谓“银根连着地根”。

From #

置身事内