N叉树的广度优先遍历和深度优先遍历

class Node {

public:

int val;

vector<Node*> children;

};

// N 叉树的非递归层序遍历(广度优先遍历)

void levelOrderTraverse(Node* root) {

if (root == nullptr) {

return;

}

std::queue<Node*> q;

q.push(root);

while (!q.empty()) {

Node* cur = q.front();

q.pop();

// 访问 cur 节点

std::cout << cur->val << std::endl;

// 把 cur 的所有子节点加入队列

for (Node* child : cur->children) {

q.push(child);

}

}

}

// N 叉树的递归先序遍历(深度优先遍历)

void Preorder(Node* root){

// 先序遍历

if(nullptr == root) return;

// 访问当前节点

cout << root->data << endl;

// 访问子节点

for(auto node:root->children){

Preorder(node);

}

}

// N 叉树的非递归先序遍历(深度优先遍历)

void preorder_stack(node* root){

if(nullptr == root) return;

stack<node*> s;

s.push(root);

while(!s.empty()){

node* node = s.top();

s.pop();

cout << node->data << " ";

for(int i=node->children.size()-1; i>=0; i--){

s.push(node->children[i]);

}

}

}

// N 叉树的递归后序遍历(深度优先遍历)

void Postorder(Node* root){

// 先序遍历

if(nullptr == root) return;

// 访问子节点

for(auto node:root->children){

Postorder(node);

}

// 访问当前节点

cout << root->data << endl;

}

// N 叉树的非递归后序遍历(深度优先遍历)

void Postorder_stack(Node* root){

if(nullptr == root) return;

stack<Node*> s;

s.push(root);

Node* pre = root;

while(!s.empty()){

Node* node = s.top();

if(node->children.empty() // 叶子结点

|| pre == node->children.back() // 分支节点的叶子节点完>成访问

){

s.pop();

cout << node->data << " ";

}else{

for(int i=node->children.size()-1; i>=0; i--){

s.push(node->children[i]);

}

}

pre = node;

}

}

// N 叉树的非递归层序遍历(广度优先遍历)

int depth(Node* root) {

if(nullptr == root) return 0;

int maxdepth = 0;

for(auto child : root->children){

maxdepth = max(maxdepth, depth(child));

}

return maxdepth+1;

}

void traverLayer(Node* root, int level){

if(nullptr == root) return;

if(level == 0){

cout << root->data << " ";

}else{

for(auto child:root->children){

traverLayer(child,level-1);

}

}

}

void BFS2(Node* root){

if(nullptr == root) return;

int n=depth(root);

for(int i=0; i<n; i++){

traverLayer(root, i);

}

}

全部评论

相关推荐

评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务