【问题标题】:Recursive function to find the rightmost leaf in a tree given a node递归函数在给定节点的树中找到最右边的叶子
【发布时间】:2021-03-15 05:42:04
【问题描述】:

这段代码能否递归地找到最右边的叶子。谢谢

 Node* findRightMostLeaf(Node* curNode){
 if (curNode== NULL) 
     return null;
 if (curNode->rchild!= NULL)
   return findRightMostLeaf(curNode->rchild);
 if (curNode->lchild!= NULL)
   return findRightMostLeaf(curNode->lchild);
else return curNode; } 

【问题讨论】:

  • 我建议你在一张纸上画一棵小树,从根节点(或任何其他节点)开始,看看这段代码带你去哪里,不长,你可以跟着它。
  • 函数已经写好了,何不试试呢?如果它不符合您的期望,请提供一个最低限度的工作示例。
  • 不,此代码不起作用。即使您提供了Node 的定义,curNode 也是一个指针,因此您必须使用-> 而不是.,并且null 是未定义的。
  • 我在写这个函数之前确实画了它,但由于我是递归新手,我试图确保它是正确的,如果不是一些建议我哪里出错了
  • 你的模型中的叶子是什么?它与节点不同吗?

标签: c++ algorithm recursion tree


【解决方案1】:

假设您构建的树是二叉搜索树。在这种情况下,您提供的解决方案应该有效。 您可以在此处查看其他迭代解决方案 https://www.geeksforgeeks.org/deepest-right-leaf-node-binary-tree-iterative-approach/

【讨论】:

  • 该网站上的示例以#include <bits/stdc++.h> / using namespace std; 开头。 Why should I not #include <bits/stdc++.h>? Why is using namespace std; considered bad practice? 对于那些学习 C++ 的人,我建议不要去这个网站——它教如何编写糟糕的代码,与专业编程无关。
  • 其实我主要专注于提供一个简单易懂的替代算法示例。
  • SO 的规则建议编写独立的答案。只包含没有解释的外部链接的答案不是很有用。当链接失效时,它们将变得完全无用。
猜你喜欢
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-15
  • 2016-01-24
  • 1970-01-01
  • 2012-02-10
  • 2018-10-31
相关资源
最近更新 更多