在二进制搜索树中查找最深级别的左叶节点
Finding the deepest level left leaf node in a binary search tree
给定一个二叉树,找到其父级的最深叶节点。例如,考虑以下树。最深的左叶节点是值为9的节点。
1
/
2 3
/ /
4 5 6
7 8
/
9 10
答案是9。
我为此开发了以下代码:
int maxlevel = 0;
Node *newNode(int data)
{
Node *temp = new Node;
temp->val = data;
temp->left = temp->right = NULL;
return temp;
}
Node * root;
Node * maxi = NULL;
int getlevel (Node * treeroot,int level, Node * foo)
{
if (treeroot == NULL)
return -1;
else if (treeroot->val == foo->val)
return level+1;
else
{
int downlevel = getlevel(treeroot->left,level+1,foo);
if (downlevel != -1)
return downlevel;
else
downlevel = getlevel(treeroot->right,level+1,foo);
return downlevel;
}
}
void foo(Node * temp)
{
// Base case
if (temp == NULL)
return;
Node * prev;
if (temp->left != NULL)
{
prev = temp;
foo(temp->left);
}
if (prev->left != NULL)
{
if (temp->left == NULL && temp->right == NULL && prev->left == temp)
{
int ind = getlevel(root,0,temp);
if (ind > maxlevel)
{
maxlevel = ind;
maxi = temp;
}
}
}
foo(temp->right);
return;
}
这里,foo
是确定树中最深的左叶的实际函数。getlevel
是一个获取树中节点级别的函数。CCD_ 3是分配新节点的函数。当我尝试给出这个输入树时,它会说叶子不存在。我的逻辑有问题吗?谢谢
我认为您可以通过将当前级别和指示当前节点是左子级还是右子级的标志传递到每个调用中来简化这一点。。。
类似这样的东西:
int maxLevel = 0;
Node* maxNode = null;
void findDeepestLeftNode(Node* node, int level, bool isLeftChild) {
bool isLeaf = true;
if (node->left != null) {
isLeaf = false;
findDeepestLeftNode(node->left, level + 1, true);
}
if (node->right != null) {
isLeaf = false;
findDeepestLeftNode(node->right, level + 1, false);
}
if (isLeaf && isLeftChild && level > maxLevel) {
maxLevel = level;
maxNode = node;
}
}
然后用来称呼它
findDeepestLeftNode(root, 0, false);
假定根不为null。
相关文章:
- 使用二进制搜索树中的迭代器对象访问左侧节点
- 将二进制字符串/文件内容从 c++ 传递到节点 js
- 有没有办法访问C++ Boost rtree 中的非叶节点
- C ,二进制树的高度,而不是检查我的子树是否为空,而是在检查我的子树是否是叶子节点.抛出分割故障
- 具有最大不同节点的根到叶路径
- 检查节点是否是二进制搜索树的根
- 在二进制搜索树中删除节点
- 如何映射数组元素以选择二进制树节点
- 如何从二进制搜索树中删除节点
- 带有钩子的C 二进制树,让我知道何时/何时插入或移动节点
- 从C++二进制搜索树中删除一个节点(类而非结构)
- 是否有任何函数可以从 wxtreelistctrl 获取所有选定的叶节点
- 为什么这个计算二进制搜索树中节点的递归函数总是返回比预期更大的结果
- 二进制树类创建随机节点,断裂
- 如何用空节点创建完整的二进制树
- 二进制树搜索删除节点复杂性
- 分支和叶节点的独立类
- 试图验证表达式树中的叶节点
- 在二进制搜索树中查找最深级别的左叶节点
- 如何返回一个boost::property_tree的叶节点