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;}
}