当前位置: 首页 > 知识库问答 >
问题:

改变二叉树中父节点和子节点的位置

和谦
2023-03-14

所以,我想做的是检查一个完整的二叉树叶子中的 int 是否比它的父叶大,并以此为标准让它与它的父叶不断改变位置,一直到根。问题是,当它必须与根进行比较和更改位置时,它会塞格福;如果我在那之前让循环停止,它工作得很好(我认为)。我在这里错过了一些明显的东西吗?

typedef struct tnode *Treeptr;

typedef struct tnode {
    float owed;
    long afm;   

    Treeptr father;
    Treeptr left;
    Treeptr right;
} Treenode;

添加新叶子时,将发生以下情况。我省略了叶子实际添加到树中的部分,因为它工作正常并且很长。指针 p 指向循环开始之前插入的最后一个叶。根的父亲和叶子的子项初始化为 NULL。

static int depth = 1;       
static int nodes_number = 0;        
int i;
Treeptr temp, temp2;

if(nodes_number == pow(2, depth) - 1)  
    depth++;            
nodes_number++; 

for(i=1 ; i<depth ; i++) {      
    if(p->owed > p->father->owed) { 
        temp = p->father;
        p->father = temp->father;
        if(temp->father != NULL) {
            if(temp == temp->father->left)
                temp->father->left = p;
            else
                temp->father->right = p;
        }   
        if(p == temp->left) {
            temp->left = p->left;
            p->left = temp;
            temp2 = p->right;
            p->right = temp->right;
            temp->right = temp2;                
        }
        else {
            temp->right = p->right;
            p->right = temp;
            temp2 = p->left;
            p->left = temp->left;
            temp->left = temp2;
        }           
    }
    else
        break;
}

共有1个答案

蒋曾笑
2023-03-14

在< code>i=1的情况下,p指向根节点,p-

if(p->owed > p->father->owed) { 

p-

我想把这条线改成

if( (p->father!=NULL) && (p->owed > p->father->owed) ) { 

将解决它。

 类似资料:
  • 如果我没弄错的话,树通常是一个列表,其中的元素按特定顺序排列。孩子们不在他们自己的子列表中,他们都在同一个列表中。 所以,我试图创建一个Tree类,其中包含TreeNodes(类)使用Tree类中的List。 我如何跟踪父母/孩子/叶子?如果父母“父母1”,有两个孩子“孩子A”和“孩子B”,我如何将他们联系在一起?

  • 我需要创建一个递归方法,将二叉查找树的根节点作为参数。这个递归方法将返回整个二叉查找树中内部节点总数的int值。 这就是我到目前为止所拥有的: 有没有更好的办法?我还坚持寻找迭代解。

  • class Node(object): def __init__(self, data, left=None, right=None): self.data = data self.left = left self.right = right tree = Node(1, Node(3, Node(7, Node(0)), Node(6)), Node(2, Node

  • 所以我想进入我的树(假设它没有重复项并且分支正确)并找到参数中给出的元素。我发现我的方法给了我一个 BinaryNode,它类似于我想要的(根)在其字段中,但实际上不是根。我没有覆盖等于方法。使用 equals 方法,当比较返回的对象和根时,测试返回 false。我想知道为什么我的变量 elementNode 在设置为 null 时不引用(因此更改)根为 null。 二进制节点是使用泛型实现的。调

  • 本文向大家介绍二叉树中叶子节点的统计和树高问题,包括了二叉树中叶子节点的统计和树高问题的使用技巧和注意事项,需要的朋友参考一下 1、已知二叉树以二叉链表进行存储,其中结点的数据域为data,编写算法,统计二叉树中叶子结点值等于x的结点数目。 2、已知一棵二叉链表方式存储的二叉树,编写算法计算二叉树的高度。 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值

  • 我有一个二叉树,我想打印所有非边界节点。边界节点:-所有叶节点从根到最左节点路径上的所有节点所有节点从根到最右节点。 我在树结构中使用了一个额外的布尔值来确定它是否是边界节点,如果不是边界节点,则进行遍历和打印。有人能想出一个更好的方法吗,因为它使用了一些额外的空间(虽然很少)。