二叉树的解法一般包括递归(深度优先)和迭代(广度优先)
递归就是先处理叶子节点,再处理上一层节点
迭代就是从上到下处理
以下用迭代方式实现二叉树遍历
首先要定义一个节点类,供遍历代码调用
二叉树节点的定义:
class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x){
val=x;
left=null;
right=null;
}
}
res就是遍历要输出的结果,是一个列表
前序、中序、后序的顺序分别是中左右、左中右、左右中,怎么记忆xx序对应的输出顺序?以前序为例,“前”代表根节点的输出位置在最前面,就是中左右,以此类推,这样就很好记。
前序:
List<Integer> res=new ArrayList<>();
public List<Integer> preorderTraversal(TreeNode root) {
dfs(root);
return res;
}
public void dfs(TreeNode root){
if(root==null) return;
//先把根节点加到结果集
res.add(root.val);
//左节点加到结果集
dfs(root.left);
//右节点加到结果集
dfs(root.right);
}
根据以上思路实现中序遍历、后序遍历,就很容易,只需要调换三行代码的位置
中序:
dfs(root.left);
res.add(root.val);
dfs(root.right);
后序
dfs(root.left);
dfs(root.right);
res.add(root.val);