网站做商业计划书吗,阿里巴巴网站推广方式,微信分享网站短链接怎么做的,wap网站搜索题目描述 给定一个二叉树的 根节点 root#xff0c;想象自己站在它的右侧#xff0c;按照从顶部到底部的顺序#xff0c;返回从右侧所能看到的节点值。
解析 这一题的关键其实就是找到怎么去得到当前是哪一层级#xff0c;可以利用队列对二叉树进行层次遍历#xff0c;但…题目描述 给定一个二叉树的 根节点 root想象自己站在它的右侧按照从顶部到底部的顺序返回从右侧所能看到的节点值。
解析 这一题的关键其实就是找到怎么去得到当前是哪一层级可以利用队列对二叉树进行层次遍历但是需要稍微修改下遍历方式每次都将该层遍历完。
public ListInteger rightSideView(TreeNode root) {if (root null) {return new ArrayList(); // 返回空列表而非null}ListInteger res new ArrayList();QueueTreeNode queue new LinkedList();queue.offer(root);while (!queue.isEmpty()) {int levelLength queue.size(); // 当前层的长度for (int i 0; i levelLength; i) {TreeNode node queue.poll();// 仅在遍历到当前层最后一个元素时记录if (i levelLength - 1) {res.add(node.val);}if (node.left ! null) {queue.offer(node.left);}if (node.right ! null) {queue.offer(node.right);}}}return res;}然后深度优先遍历也是可以求解。优先遍历右子树同时记录下当前遍历到的层级即可。
public ListInteger rightSideView(TreeNode root) {ListInteger ans new ArrayList();dfs(root, 0, ans);return ans;}private void dfs(TreeNode node, int depth, ListInteger ans) {if (node null) {return;}if (ans.size() depth) {ans.add(node.val);}depth;dfs(node.right, depth, ans);dfs(node.left, depth, ans);}