”’java
class Solution {
public List rightSideView(TreeNode root){
Map<Integer,Integer> rightValue = new HashMap<>();
int max_depth = -1;
Deque nodeStack = new LinkedList<>();
Deque depthStack = new LinkedList<>();
nodeStack.push(root);
depthStack.push(0);
class Solution {
public List<Integer> rightSideView(TreeNode root) {
// 层序遍历取每一层的最后一个元素即可
Queue<TreeNode> queue = new LinkedList<>();
List<Integer> res = new ArrayList<>();
if (root==null) {
return res;
}
queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i++) {
if (i==size-1) {
TreeNode poll = queue.poll();
res.add(poll.val);
if (poll.left!=null) queue.offer(poll.left);
if (poll.right!=null) queue.offer(poll.right);
} else {
TreeNode poll = queue.poll();
if (poll.left!=null) queue.offer(poll.left);
if (poll.right!=null) queue.offer(poll.right);
}
}
}
return res;
}
}
class Solution {
public List<Integer> rightSideView(TreeNode root) {
List<List<Integer>> list = new ArrayList<>();
List<Integer> res = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
if(root == null) return res;
queue.offer(root);
while(!queue.isEmpty()){
int n = queue.size();
List<Integer> tem = new ArrayList<>();
while(n-->0){
TreeNode node = queue.poll();
tem.add(node.val);
if(node.left!=null) queue.offer(node.left);
if(node.right!=null) queue.offer(node.right);
}
list.add(tem);
}
for(int i =0;i<list.size();i++){
int p =list.get(i).size()-1;
res.add(list.get(i).get(p));
}
return res;
}
}
共以下 28 个回答
/** ans;
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
private:
vector
public: rightSideView(TreeNode* root) { > res;
vector
vector<vector
if(!root) return {};
};
层序遍历,每层最后一个节点的值存储下来
时间复杂度On 代表二叉树的节点值
空间复杂度On
”’java rightSideView(TreeNode root){ nodeStack = new LinkedList<>(); depthStack = new LinkedList<>();
class Solution {
public List
Map<Integer,Integer> rightValue = new HashMap<>();
int max_depth = -1;
Deque
Deque
nodeStack.push(root);
depthStack.push(0);
}
时间复杂度O(n)
空间复杂度O(n)
”’
思路:层序遍历二叉树,然后将每层的最后一个节点加入结果集中就可以
时间复杂度:O(n)
空间复杂度:O(n)
C++代码 层次遍历做一些改进 rightV; rightSideView(TreeNode root)
class Solution {
vector
queue<TreeNode> inqueue;
public:
vector
{
if(!root) return rightV;
rightV.push_back(root->val);
inqueue.push(root);
while(inqueue.size())
{
int l=inqueue.size();
int rr=-1;
for(int i=0;i<l;i++)
{ TreeNode* te=inqueue.front();
inqueue.pop();
if(te->left) inqueue.push(te->left);
if(te->right) inqueue.push(te->right);
if(te->left)
rr=te->left->val;
if(te->right)
rr=te->right->val;
}
if(rr!=rightV.back()&&rr!=-1) rightV.push_back(rr);
}
return rightV;
}
};
时间复杂度:O(n)
空间复杂度:O(n)
层序遍历
层序遍历
回溯解法:
层序遍历解法:
思路
就是层序遍历的那一套,只是只存最后这一个节点的值。
代码
按从右到左层次遍历,每层拿出第一个结点值即可。 时间O(n) 空间O(n)
层序遍历, 将每层最后一个节点放入vector
时间复杂度O(n),空间复杂度O(n),层序遍历
时间复杂度:O(n)
空间复杂度:O(n)
“`c++ rightSideView(TreeNode* root) { q; ans;val);
class Solution {
public:
vector
queue
q.push(root);
vector
if(q.front()==nullptr) return ans;
while(!q.empty())//层次遍历
{
int k=q.size();
for(int i=0;i
if(tmp->right) q.push(tmp->right);
if(tmp->left) q.push(tmp->left);
}
}
return ans;
}
};
时间复杂度:
代码
时间: O(N)
空间; o (n)
class Solution { rightSideView(TreeNode root) { result =new ArrayList (); queue =new LinkedList (); 0)
public List
//层序遍历 加入每一行的最右边
List
if(root null)
{
return result;
}
Queue
queue.add(root);
while(!queue.isEmpty())
{
int i =queue.size();
TreeNode temp;
while(i>0)
{
temp = queue.remove();
i–;
if(i
{
result.add(temp.val);
}
if(temp.left!=null)
{
queue.add(temp.left);
}
if(temp.right!=null)
{
queue.add(temp.right);
}
}
Day12:下面是代码