您的位置:首页 > 其它

层序(level-order)列出二叉树的节点

2016-04-25 00:22 169 查看
数据结构与算法分析——c语言描述 练习4.35 答案

#include"fatal.h"
#include<stdlib.h>
#include<queue>
using namespace std;

typedef int ElementType;

struct TreeNode;
typedef struct TreeNode *Position;
typedef struct TreeNode *SearchTree;

struct TreeNode {
ElementType element;
SearchTree left;
SearchTree right;
};

SearchTree GenTree(int H, int *lastNodeElem) {
if (H >= 0) {
SearchTree t = (SearchTree)malloc(sizeof(struct TreeNode));
if (t == NULL)
Error("OUT OF MEMORY");
t->left = GenTree(H - 1, lastNodeElem);
t->element = ++*lastNodeElem;
t->right = GenTree(H - 1, lastNodeElem);

return t;
}
return NULL;
}

SearchTree makePerfectTree(int H) {
int lastElem = 0;
return GenTree(H, &lastElem);
}

void dir_level(queue<pair<SearchTree,int>> nodesToTravel) {
int level = -1;
while(!nodesToTravel.empty()) {
auto treeAndDepth = nodesToTravel.front();
nodesToTravel.pop();
if (treeAndDepth.second > level) {
level++;
if (level != 0)
printf("\n");
printf("level %d:", level);
}
printf("%d ", treeAndDepth.first->element);
if (treeAndDepth.first->left)
nodesToTravel.push({ treeAndDepth.first->left,level + 1 });
if (treeAndDepth.first->right)
nodesToTravel.push({ treeAndDepth.first->right,level + 1 });
}
}

int main() {
SearchTree t = makePerfectTree(2);
queue<pair<SearchTree, int>> nodesToTravel;
nodesToTravel.push({ t,0 });
dir_level(nodesToTravel);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: