首页 > 其他分享 >leetcode二叉树遍历

leetcode二叉树遍历

时间:2022-12-01 17:05:52浏览次数:47  
标签:node std 遍历 leetcode vec 二叉树 nodes ptr lay


#include <stdio.h>
#include <string.h>
#include <iostream>
#include <vector>
#include <queue>
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {
}
};
static constexpr int TERMINATION = -1;
struct TreeNode *root = nullptr;
void create_root(struct TreeNode *&ptr) {
int x;
std::cin >> x;
if (TERMINATION == x) {
return;
}
if (nullptr == ptr) {
ptr = new TreeNode(x);
create_root(ptr->left);
create_root(ptr->right);
}
}
std::vector<std::vector<int>> levelOrder(TreeNode* root) {
if (nullptr == root) {
return std::vector<std::vector<int>>();
}
std::queue<TreeNode *>tree_node_ptr_queue;
std::vector<int>lay_nodes_vec;
std::vector<std::vector<int>>lays_nodes_vec;
tree_node_ptr_queue.push(root);
int lay_nodes = 1;
int next_lay_nodes = 0;
while (false == tree_node_ptr_queue.empty()) {
auto ptr = tree_node_ptr_queue.front();
lay_nodes_vec.emplace_back(ptr->val);
tree_node_ptr_queue.pop();
lay_nodes--;
if (ptr->left != nullptr) {
tree_node_ptr_queue.push(ptr->left);
++next_lay_nodes;
}
if (ptr->right != nullptr) {
tree_node_ptr_queue.push(ptr->right);
++next_lay_nodes;
}
if (0 == lay_nodes) {
lays_nodes_vec.emplace_back(lay_nodes_vec);
lay_nodes_vec.clear();
lay_nodes = next_lay_nodes;
next_lay_nodes = 0;
}
}
return lays_nodes_vec;
}
int main() {
create_root(root);
std::vector<std::vector<int>> vec = levelOrder(root);
for (auto &e : vec) {
std::cout << "lay size = " << e.size() << std::endl;
for (auto &x : e) {
std::cout << x << " ";
}
std::cout << std::endl;
}

return 0;
}

 

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
if (nullptr == root) {
return std::vector<std::vector<int>>();
}
std::queue<TreeNode *>tree_node_ptr_queue;
std::vector<int>lay_nodes_vec;
std::vector<std::vector<int>>lays_nodes_vec;
tree_node_ptr_queue.push(root);
int lay_nodes = 1;
int next_lay_nodes = 0;
while (false == tree_node_ptr_queue.empty()) {
auto ptr = tree_node_ptr_queue.front();
lay_nodes_vec.emplace_back(ptr->val);
tree_node_ptr_queue.pop();
lay_nodes--;
if (ptr->left != nullptr) {
tree_node_ptr_queue.push(ptr->left);
++next_lay_nodes;
}
if (ptr->right != nullptr) {
tree_node_ptr_queue.push(ptr->right);
++next_lay_nodes;
}
if (0 == lay_nodes) {
lays_nodes_vec.emplace_back(lay_nodes_vec);
lay_nodes_vec.clear();
lay_nodes = next_lay_nodes;
next_lay_nodes = 0;
}
}
return lays_nodes_vec;
}
};

leetcode二叉树遍历_#include

标签:node,std,遍历,leetcode,vec,二叉树,nodes,ptr,lay
From: https://blog.51cto.com/u_15899033/5902960

相关文章

  • leetcode倒转整数--snprintf性能不行
    #include<stdio.h>#include<string.h>#include<iostream>#include<limits>intreverse(intx){longsum=0;while(x){sum=sum*10+x%10;......
  • leetcode-搜索插入位置
    intsearchInsert(std::vector<int>&nums,inttarget){inti=0;intsize=nums.size();for(;i<size;i++){if(nums[i]>=target){......
  • 刚写完的一个用户遍历更新的SQL存储过程,分享一下吧
    setANSI_NULLSONsetQUOTED_IDENTIFIERONgo/*填充用户评价等级*/ALTERPROC[dbo].[Fill_Userinfos_BuyerRank_SellerRank]@useridVARCHAR(12)=NULLASB......
  • 设计链表-LeetCode707 基础题
    LeetCode链接:https://leetcode.cn/problems/design-linked-list/题目:设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val......
  • 代码随想录算法训练营Day15|102. 二叉树的层序遍历、226. 翻转二叉树、101. 对称二叉
    代码随想录算法训练营Day15|102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树102.二叉树的层序遍历102.二叉树的层序遍历需要借用一个辅助数据结构即队列来......
  • leetcode 15. 三数之和 js实现
    给你一个整数数组 nums ,判断是否存在三元组 [nums[i],nums[j],nums[k]] 满足 i!=j、i!=k 且 j!=k ,同时还满足 nums[i]+nums[j]+nums[k]==0 。请......
  • LeetCode刷题记录.Day29
    前K个高频元素classSolution{public://小顶堆classmycomparison{public:booloperator()(constpair<int,int>&lhs,constpair<int,......
  • leetcode-160-easy
    IntersectionofTwoLinkedListsGiventheheadsoftwosinglylinked-listsheadAandheadB,returnthenodeatwhichthetwolistsintersect.Ifthetwolinke......
  • leetcode-111-easy
    MinimumDepthofBinaryTreeGivenabinarytree,finditsminimumdepth.Theminimumdepthisthenumberofnodesalongtheshortestpathfromtherootnode......
  • 力扣 leetcode 162. 寻找峰值
    问题描述峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即......