对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点-----层序遍历的应用题
2013-09-11 20:14
501 查看
题目:对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。
答:时间复杂度为O(n),空间复杂度为O(n)。
#include "stdafx.h" #include <iostream> #include <fstream> #include <vector> using namespace std; struct TreeNode { int m_nValue; TreeNode *m_pLeft; TreeNode *m_pRight; TreeNode *pNext; }; //假定所创建的二叉树如下图所示 /* 1 / \ 2 3 / \ / \ 4 5 6 7 / \ / \ / \ 8 9 10 11 12 13 */ void CreateBitree(TreeNode *&pNode, fstream &fin) { int dat; fin>>dat; if(dat == 0) { pNode = NULL; } else { pNode = new TreeNode(); pNode->m_nValue = dat; pNode->m_pLeft = NULL; pNode->m_pRight = NULL; pNode->pNext = NULL; CreateBitree(pNode->m_pLeft, fin); CreateBitree(pNode->m_pRight, fin); } } //完全二叉树指向同一层的相邻结点 void Solution(TreeNode *pHead) { if (NULL == pHead) { return; } vector<TreeNode*> vec; vec.push_back(pHead); TreeNode *pre = NULL; TreeNode *pNode = NULL; int cur = 0; int last = 0; while(cur < vec.size()) { last = vec.size(); while (cur < last) { if (NULL == pre) { pre = vec[cur]; } else { pre->pNext = vec[cur]; } if (NULL != vec[cur]->m_pLeft) { vec.push_back(vec[cur]->m_pLeft); } if (NULL != vec[cur]->m_pRight) { vec.push_back(vec[cur]->m_pRight); } pre = vec[cur]; cur++; } pre->pNext = NULL; pre = NULL; } } int _tmain(int argc, _TCHAR* argv[]) { fstream fin("tree.txt"); TreeNode *pHead = NULL; TreeNode *pNode = NULL; CreateBitree(pHead, fin); Solution(pHead); while (NULL != pHead) { cout<<pHead->m_nValue<<" "; pNode = pHead->pNext; while (NULL != pNode) { cout<<pNode->m_nValue<<" "; pNode = pNode->pNext; } cout<<endl; pHead = pHead->m_pLeft; } cout<<endl; return 0; }
答:时间复杂度为O(n),空间复杂度为O(n)。
相关文章推荐
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。
- 淘宝笔试题:一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL
- 淘宝笔试题:一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL
- 二叉树层序遍历应用:要求将所有结点加上一个m_pNext指针,指向同层右侧的结点,右侧若无结点则指向NULL,写出其中的Connect函数。
- 一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个rand指针指向这个链表中的一个随机节点或NULL,现在要求复制一个单链表来实现这个链表,返回复制后的新链表。
- 给定一颗完全二叉树,给每一层添加上next的指针,从左边指向右边
- 给定一单链表的表头指针和指向其中一个节点的指针,要求以该指针为头将原链表逆序
- 给定一颗完全二叉树,给每一层添加上next的指针,从左边指向右边
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。
- 数据结构:二叉树,二叉树的前中后序、层序遍历(递归法,非递归法),得到一个数叶子节点的个数……
- 利用叶子节点中的空指针将所有叶子节点链接为一个带头节点的双链表
- 有一段文本,将文本中的所有单词,存放到一个字符指针数组中(要求每个单词内存恰好)
- 3、有一段文本,将文本中的所有单词,存放到一个字符指针数组中(要求每个单词内存恰好)
- 一个单向链表,不知道头节点,一个指针指向其中一个节点,问如何删除这个指针指向的节点?
- )RGB排序,一个字符串,里面只有三种字符R G B,所有的R都在G的前面,所有的G都在B的前面。将给定字符串按照此规律排序。要求不允许用辅助空间,复杂度控制在O(N)。遍历一遍就排好序。
- 题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶结点所经过的结点形成一条路径。
- /* 用指向指针的指针的方法对n个整数排序并输出 。要求将排序单独写成一个函数。n个整数在主函数中输入,最后在主函数中输出*/
- 使用LINUX C实现一个链表,要求:链表节点构成:姓名、分数、下一个节点指针...