题目:
You need to find the largest value in each row of a binary tree.
Example:
Input: 1 / \ 3 2 / \ \ 5 3 9 Output: [1, 3, 9]tips:主要考察的是二叉树的层次遍历,从左到右,从上到下
以前c++有个demo
void LevelTraverse(BinaryTreeNode * pRoot)
{
if(pRoot == NULL)
return;
queue<BinaryTreeNode *> q;
q.push(pRoot);
while(!q.empty())
{
BinaryTreeNode * pNode = q.front();
q.pop();
Visit(pNode); // 访问节点
if(pNode->m_pLeft != NULL)
q.push(pNode->m_pLeft);
if(pNode->m_pRight != NULL)
q.push(pNode->m_pRight);
}
return;
}
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<Integer> largestValues(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<TreeNode>(); //LinkedList 实现Java中的Queue接口,可以用它来实例化
List<Integer> res = new LinkedList<Integer>();
if (root == null) return res;
queue.offer(root);
while (!queue.isEmpty()) {
int levelNum = queue.size();
int temp = queue.peek().val;
if (queue.peek().left != null) queue.offer(queue.peek().left);
if (queue.peek().right != null) queue.offer(queue.peek().right);
queue.poll();
for (int i = 1; i < levelNum; i++) {
if (queue.peek().val > temp) temp = queue.peek().val;
if (queue.peek().left != null) queue.offer(queue.peek().left);
if (queue.peek().right != null) queue.offer(queue.peek().right);
queue.poll();
}
res.add(temp);
}
return res;
}
}