1.把二叉树打印成多行
class Solution{
public List<List<Integer>> levelOrder(TreeNode root){
List<List<Integer>> res=new ArrayList<>();
Queue<TreeNode> q=new LinkedList<>();
if(root!=null) q.add(root);
while(!q.isEmpty()){
List<Integer> temp=new ArrayList<>();
for(int i=q.size();i>0;i--){
TreeNode node=q.poll();
temp.add(node.val);
if(node.left!=null) q.add(node .left);
if(node.right!=null) q.add(node.right);
}
res.add(temp);
}
return res;
}
}
思路:
1.创建一个res集合和q队列。
2.判断根节点是否为空,将根节点加入到q的队列中。
3.遍历队列,将根节点的值放入list集合中的List<Integer>中
然后将左子树和右子树加入到q的队列中。
2.二叉搜索树的第K大节点
class Solution{
public int kthLargest(TreeNode root,int k){
k1=k;
dfs(root);
return res;
}
private void dfs(TreeNode root){
if(root==null||k1==0) return;
dfs(root.right);
if(--k1==0) res=root.val;
dfs(root.left);
}
}
思路:中序排序是递增(左中右),中序序列反过来就是递减
1.深度搜索的方法,先是右子树,然后根节点,最后左子树。
|