首页 > 编程知识 正文

二叉树的层次遍历代码,完全二叉树序列层次

时间:2023-05-05 03:45:46 阅读:14393 作者:4454

提示:写完文章后,目录可以自动生成。 如何生成可以引用右侧的帮助文档

文章目录二叉树的分类二叉树的遍历1 .递归法2 .迭代法**3.层序扫描总结

二叉树的分类充满二叉树。 如果一个二叉树只有度0和度2的节点,并且度0的节点在同一层,则该二叉树充满二叉树。

完全二叉树:在完全二叉树中,为除了最底层节点可能没填满外,其余各层节点数均达到最大值,并位于最底层节点3358www.Sina.com/的几个位置。 如果最底层是第h层,则该层包含1 ̄2 ̄h-1个节点。

二叉搜索树:有数值的二叉树,是有序的树。 如果其左侧树不空,则都集中在该层最左边如果右侧树不空,则左子树上所有结点的值均小于它的根结点的值其左、右子树也分别是两股排序树。

平衡二叉树:也称为AVL(Adelson-VelskyandLandis )树,是天空树或其左右两个子高度差的绝对值在1以下,且左右两个子为平衡二叉树。

二叉树遍历1 .递归法2 .迭代法**3.层序遍历右子树上所有结点的值均大于它的根结点的值

类别解决方案{ public : vectorvectorintlevelorder (treenode * root ) { vectorvectorint result; //保存结果的队列树*队列; if (路线!=NULL ) que.push (根); while (! que.empty () ) { int size=que.size; 向量输入向量; for(intI=0; isize; I ) { TreeNode*node=que.front (; vec.push _ back (节点- val; que.pop : if (节点左) que.push )节点左; if (节点光) que.push )节点光; }result.push_back(vec; //reverse(result.begin )、result.end ); //107题返回结果; };leetcode102、107题:打印层序(层序的逆序)

类别解决方案{ public : vectorintrightsideview (treenode * root ) { vectorint result; //保存结果的队列树*队列; if (路线!=NULL ) que.push (根); while (! que.empty () ) { int size=que.size; for(intI=0; isize; I ) { TreeNode*node=que.front (; if(I==size-1 ) result.push_back(node-val ); //打印每行末尾索引的元素que.pop (; if (节点左) que.push )节点左; if (节点光) que.push )节点光; } }返回结果; };leetcode199题:右视图

类别解决方案{ public : vectorintrightsideview (treenode * root ) { vectordouble result; //保存结果的队列树*队列; if (路线!=NULL ) que.push (根); while (! que.empty () ) { int size=que.size; 双精度和=0; for(intI=0; isize; I ) { TreeNode *node=que.front (; sum =node-val; //每行末尾索引的元素que.pop (

); if(node->left) que.push(node->left); if(node->right) que.push(node->right); } result.push_back(sum/size); } return result; }};

leetcode429题:返回每一层所有包括children

class Solution{public: vector<vector<int>> levelOrder(Node* root){ vector<vector<int>> result;//存储结果 queue<Node*> que; if(root != NULL) que.push(root); while(!que.empty()){ int size = que.size(); vector<int> vec; for(int i=0;i<size;i++){ Node *node = que.front(); vec.push_back(node->val); que.pop(); for(int i = 0;i<node->children.size();i++){ if(node->children[i]) que.push(node->children[i]); } } result.push_back(vec); } return result; }};

leetcode515题:返回每一层的max

class Solution {public: vector<int> largestValues(TreeNode* root) { vector<int> result; queue<TreeNode*> que; if (root != NULL) que.push(root); while(!que.empty()){ int size = que.size(); vector<int> vec; int max_val = INT_MIN; for(int i= 0;i<size;i++){ TreeNode*node = que.front(); vec.push_back(node->val); que.pop(); max_val = node->val>max_val ? node->val :max_val; if(node->right) que.push(node->right); if(node->left) que.push(node->left); } result.push_back(max_val); } return result; }};

leetcode116(117完全一样)题:返回每一层的最右

class Solution {public: Node* connect(Node* root) { queue<Node*> que; if(root!=NULL) que.push(root); while(!que.empty()){ int size = que.size(); for(int i = 0;i<size;i++){ Node *cur = que.front(); que.pop(); if(i==size-1) cur->next = NULL; else cur->next = que.front(); if(cur->left) que.push(cur->left); if(cur->right) que.push(cur->right); } }return root;

leetcode104 题:返回最大深度(就是层数)

class Solution {public: Node* connect(Node* root) { queue<Node*> que; if(root!=NULL) que.push(root); while(!que.empty()){ int size = que.size(); for(int i = 0;i<size;i++){ Node *cur = que.front(); que.pop(); if(i==size-1) cur->next = NULL; else cur->next = que.front(); if(cur->left) que.push(cur->left); if(cur->right) que.push(cur->right); } }return root; 总结

总的来说就是套模板,把102题的最基础的层序模板记住,其余稍加改动即可。
参考:代码随想录https://programmercarl.com/0101.%E5%AF%B9%E7%A7%B0%E4%BA%8C%E5%8F%89%E6%A0%91.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。