ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – 如何链接树中同一级别的所有节点

2019-07-28 02:06:54  阅读:158  来源: 互联网

标签:c binary-tree


我有一个二叉树:

struct node 
{
    int n; // value of node
    struct node *left; // left subtree
    struct node *right; // right subtree
    struct node *level; // level pointer (node “to the right”)
}

最初,level字段设置为NULL.

我需要编写一个函数来链接树中同一级别的所有节点(不仅是示例,而是任何给定的树).

void linkSameLevel(struct node *t);

如何知道我的函数的运行时间和内存使用量对于包含n个节点的深度为d的树?

在这里我有:

这就是我需要的:

解决方法:

您可以为此目的使用两个队列并进行BFS遍历.
并保持两个指针currNode和prevNode.

>在Q1中推根.
>从Q1开始并初始化prevNode = null.
>从Q1开始,然后用它初始化currNode.在Q2中推送currNode的子节点.
>现在,如果prev!= null,则将prevNode与currNode链接.
>现在prevNode = currNode.
>从步骤3开始重复,直到Q1不为空.
>当Q1为空时.将Q2设置为Q1,将Q1设置为Q2(此新Q2将为空)并设置prevNode = null.转到第3步.

void linkSameLevel(node *root)
{
    if (root = null)
        return;
    queue<node *> Q1, Q2;
    Q1.push(root);
    node *currNode; node *prevNode;
    prevNode = null;
    do
    {
        while (!Q1.empty())
        {
            node *currNode = Q1.pop();
            Q2.push(currNode.left); Q2.push(currNode.right);
            if (prevNode != null)
                prevNode.level = currNode;
            prevNode = currNode;
        }
        swap(Q1, Q2);
    } while (!Q1.empty);
}

另外看看Level Order Traversal

标签:c,binary-tree
来源: https://codeday.me/bug/20190728/1558985.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有