嘻嘻,昨天真的太懒了,最后就没有做那个二叉树后序序列的题,但是看到了不错的思路哦,分享给大家,大家是最棒的
1. 二叉搜索树的后序遍历序列
题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
题解思路:首先对于一个后序序列T,可以确定的是,他的最后一个数字S必为根节点,那么前面的序列可以分为,小于S的序列,和大于S的序列。首先先从数组开头遍历,遍历完左子树之后,再开始右子树的遍历,然后如果右子树遍历完之后,i不是和size相等而是小于size,那就说明,这并不是一个后序遍历的序列。接下来再循环这个过程,思路真的很清晰
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
int size=sequence.length;
if(size ==0 )
return false;
int i=0,j;
while(--size>0)
{
while(sequence[i]<sequence[size]) i++;
j=i;
while(i<size&&sequence[i]>sequence[size]) i++;
if(i<size)
return false;
i=j;
}
return true;
}
}
2. 二叉树中和为某一值的路径
题目描述:输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
解题思路:这道题其实感觉就是去考察深度优先搜索的,就是一条道走到黑,看看有没有,然后没有的话就是回退一个看看其他的可能,代码也非常地简洁,觉得这个回答很精彩
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer>> Allpath=new ArrayList<ArrayList<Integer>>();
public ArrayList<Integer> path=new ArrayList<Integer>();
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
if(root==null)
return Allpath;
path.add(root.val);
target -=root.val;
if(target==0&&root.left==null&&root.right==null)
Allpath.add(new ArrayList<Integer>(path));
FindPath(root.left,target);
FindPath(root.right,target);
path.remove(path.size()-1);
return Allpath;
}
}
3. 复杂链表的复制
题目描述:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
今天不想写了明天吧