智能pos机怎么root(算法:C++实现二叉树遍历(递归、非递归))
快鱼网
30
完成二叉树创建,然后分别采用前序中序后序三种方式输出结果。
#include#include#include//节点结构体struct Node{ int value; Node * left; Node * right; Node(int value):value(value),left(NULL),right(NULL){}};//构建二叉树void inertNode(Node *node,int value){ if(value<=node->value){ if(!node->left){ node->left=new Node(value); } else{ inertNode(node->left,value); } } else{ if(!node->right){ node->right=new Node(value); } else{ inertNode(node->right,value); } }}//前序遍历递归实现void preOrder(Node *node){ if(node){ std::cout<value; preOrder(node->left); preOrder(node->right); }}//前序遍历非递归实现void preOrder1(Node *node){ if(node==NULL){ return; } std::stack nstack; nstack.push(node); while(!nstack.empty()){ Node *temp=nstack.top(); std::cout<value; nstack.pop(); if(temp->right){ nstack.push(temp->right); } if(temp->left){ nstack.push(temp->left); } }}//中序遍历递归实现void inOrder(Node *node){ if(node){ inOrder(node->left); std::cout<value; inOrder(node->right); }}//中序遍历非递归实现void inOrder1(Node *node){ std::stack nstack; Node *temp=node; while(temp||!nstack.empty()){ if(temp){ nstack.push(temp); temp=temp->left; } else{ temp=nstack.top(); std::cout<value; nstack.pop(); temp=temp->right; } }}//后序遍历递归实现void posOrder(Node *node){ if(node){ posOrder(node->left); posOrder(node->right); std::cout<value; }}//后序遍历非递归实现void posOrder1(Node *node){ if(node==NULL) return; std::stack nstack1, nstack2; nstack1.push(node); while (!nstack1.empty()){ Node *temp=nstack1.top(); nstack1.pop(); nstack2.push(temp); if(temp->left) nstack1.push(temp->left); if(temp->right) nstack1.push(temp->right); } while(!nstack2.empty()) { std::cout<value; nstack2.pop(); }}//广度优先遍历void broadOrder(Node *node){ if(!node){ return; } std::queue qnodes; qnodes.push(node); while(!qnodes.empty()){ Node * temp=qnodes.front(); std::cout<value; qnodes.pop(); if(temp->left){ qnodes.push(temp->left); } if(temp->right){ qnodes.push(temp->right); } }}int main(){ int n; while(std::cin>>n){ n--; int value; std::cin>>value; Node root(value); while(n--){ int newValue; std::cin>>newValue; inertNode(&root,newValue); } std::cout<<"preOrder is:"; preOrder(&root); std::cout<
标签: Node
版权声明:①本站除快鱼网签约编辑原创内容以外,部分内容来源于网络、由互联网用户自发贡献,仅供学习参考。
②文章观点仅代表原作者本人不代表本站立场,并不完全代表本站赞同其观点和对其真实性负责。
③文章版权归原作者所有,部分转载文章仅为传播更多信息、受益服务用户之目的,如信息标记有误,请联系站长修正。
④本站一律禁止以任何方式发布或转载任何违法违规的相关信息,如发现本站上有涉嫌侵权/违规及任何不妥的内容,请第一时间反馈。发送邮件到 88667178@qq.com,经核实立即修正或删除。