赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。
完全二叉树:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2^h -1 个节点。
二叉搜索树:有数值的二叉树,是一个有序树。若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树。
平衡二叉搜索树:又被称为AVL(Adelson-Velsky and Landis)树,它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
leetcode102、107题:打印层序(层序的逆序)
class Solutions{ public: vector<vector<int>> levelOrder(TreeNode*root){ vector<vector<int>> result;//存储结果 queue<TreeNode*> que; if(root != NULL) que.push(root); while(!que.empty()){ int size = que.size(); vector<int> vec; for(int i=0;i<size;i++){ TreeNode*node = que.front(); vec.push_back(node->val); que.pop(); if(node->left) que.push(node->left); if(node->right) que.push(node->right); } result.push_back(vec); } //reverse(result.begin(),result.end()); //107题 return result; } };
leetcode199题:右视图
class Solution{ public: vector<int> rightSideView(TreeNode* root){ vector<int> result;//存储结果 queue<TreeNode*> que; if(root != NULL) que.push(root); while(!que.empty()){ int size = que.size(); for(int i=0;i<size;i++){ TreeNode*node = que.front(); if(i == size-1) result.push_back(node->val);//打印每一行末尾索引的元素 que.pop(); if(node->left) que.push(node->left); if(node->right) que.push(node->right); } } return result; } };
leetcode637题:返回每一层均值
class Solution{ public: vector<int> rightSideView(TreeNode* root){ vector<double> result;//存储结果 queue<TreeNode*> que; if(root != NULL) que.push(root); while(!que.empty()){ int size = que.size(); double sum = 0; for(int i=0;i<size;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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。