给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是 {3,9,20,#,#,15,7},
该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]
]
数据范围:二叉树的节点数满足 1<=n<=10^5
收获1:这次二叉树的编写使得自己对树结构更加熟悉了~,学会了创建树的基本结构,以及相应的遍历输出
2:遇到的问题是最开始对树的创建方式void并不知道具体是什么意思,以为是按照层次遍历的方法输出的树,仔细一研究才发现是先序遍历输入的树(这里可以研究一下层次遍历创建树怎么创建?)
3:对&符号的不理解,参考博文最开始并不明白为什么有的地方是*,有的地方是&,‘&’的意义是什么呢?后来学习之后才发现是引用的意思,即对&符号后面变量的操作等同于对前面的操作,可以直接对值进行改变,一改以往必须设置对应的指针才会真正改变其中的值(还有需要注意的是如果对自己创建的结构struct要使用&的话,需要在前面加上typedef才可以
演示结果
对应的二叉树:
#include#include using namespace std; typedef struct TreeNode{ TreeNode *left; TreeNode *right; int val; }TreeNode,*BiTree; //这里的取址是引用的意思,在主函数调用参数则直接对参数进行修改等效~在使用的时候记得对该类型声明typedef void CreateTree(BiTree &root){ int num; cin>>num; //cout< root=new TreeNode(); root->val=num; CreateTree(root->left); CreateTree(root->right); } } //层次遍历 vector > levelOrder(TreeNode *root){ vector >res; if(root==NULL) return res; queue q; q.push(root); TreeNode *cur; while(!q.empty()){ vector row; int n=q.size(); for(int i=0;i cur=q.front(); q.pop(); cout< val; row.push_back(cur->val); if(cur->left) q.push(cur->left); if(cur->right) q.push(cur->right); } res.push_back(row); } return res; } //先序遍历 void preorder(vector &res,TreeNode* root){ if(root==NULL) return; res.push_back(root->val); cout< val; preorder(res,root->left); preorder(res,root->right); } vector firstOrder(TreeNode *root){ vector res; preorder(res,root); return res; } //中序遍历 void midorder(vector &res,TreeNode* root){ if(root==NULL) return; midorder(res,root->left); res.push_back(root->val); cout< val; midorder(res,root->right); } vector mediumorder(TreeNode* root){ vector res; midorder(res,root); return res; } //后序遍历 void laorder(vector &res,TreeNode* root){ if(root==NULL) return; midorder(res,root->left); midorder(res,root->right); res.push_back(root->val); cout< val; } vector lastorder(TreeNode* root){ vector res; laorder(res,root); return res; } int main() { BiTree root; CreateTree(root); cout<<"二叉树创建完成"<



