1第一种方法就是另写一个traverse方法,2第二种方法就是把函数名当成已经实现的功能,直接写
1、翻转二叉树
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root==null) return null;
TreeNode left=invertTree(root.left);
TreeNode right=invertTree(root.right);
root.left=right;
root.right=left;
return root;
}
}
2、
填充结点的右侧指针
可用层序遍历,或者遍历。
有空隙就遍历!
class Solution {
public Node connect(Node root) {
if(root==null) return null;
traver(root.left,root.right);//遍历空隙
return root;
}
public void traver(Node n1,Node n2){
if(n1==null|| n2==null) return;
n1.next=n2;
traver(n1.left,n1.right);
traver(n2.left,n2.right);
traver(n1.right,n2.left);
}
}
二叉树展开为链表
class Solution {
public void flatten(TreeNode root) {
if(root==null) return;
flatten(root.left);
flatten(root.right);
TreeNode left=root.left;
TreeNode right=root.right;//记录拉直后的结点!
root.left = null;
root.right = left;
TreeNode p=root;
while(p!=null&&p.right!=null){
p=p.right;//p为指针,一直向右遍历找最后一个
}
p.right=right;
}
}