二叉树的排序方法主要有下图三种:
(1)、前序序列:根节点->左子树->右子树
(2)、中序序列:左子树->根节点->右子树
(3)、后序序列:左子树->右子树->根节点
1、中序排序方法:
(1)、非递归算法:
public ArrayList<Integer> inorderTraversal(TreeNode root) {
// write your code here
//用于保存中序遍历的结果
ArrayList<Integer> res=new ArrayList<Integer>();
//用于返回上一层二叉树
ArrayList<TreeNode> p=new ArrayList<TreeNode>();
//如果root不为空或者p中还有元素
while(root!=null||p.size()!=0){
//如果root不为空,将root添加至p中,且root置为左子树;
while(root!=null){
p.add(root);
root=root.left;
}
//已经遍历到二叉树最左边的结点了,root.left=null,则将root加入res中,且遍历root的右子树
root=p.get(p.size()-1);
res.add(root.val);
p.remove(p.get(p.size()-1));
root=root.right;
}
return res;
}
2、前序排序方法:
//前序排列
public ArrayList<Integer> preorderTraversal(TreeNode root) {
//用于保存中序遍历的结果
ArrayList<Integer> res=new ArrayList<Integer>();
//用于返回上一层二叉树
ArrayList<TreeNode> p=new ArrayList<TreeNode>();
//如果root不为空或者p中还有元素,且将root添加到res中
while(root!=null||p.size()!=0){
//如果root不为空,将root添加至p中,且root置为左子树;
//res.add(root.val)语句的位置,是中序和前序的唯一区别
while(root!=null){
p.add(root);
res.add(root.val);
root=root.left;
}
//已经遍历到二叉树最左边的结点了,root.left=null,则遍历root的右子树
root=p.get(p.size()-1);
p.remove(p.get(p.size()-1));
root=root.right;
}
return res;
}