最近发现面试很喜欢考二叉树的遍历,所以补一个。
树的节点结构:
public class TreeNode {
public int value;
public TreeNode left;
public TreeNode right;
public TreeNode(int data) {
this.data = data;
}
}
一,二叉树的先序遍历
先序遍历顺序为根->左->右:
递归方法:
public void preOrderRecur(TreeNode root) {
if(root == null) {
return;
}
System.out.println(root.val + " ");
preOrderRecur(root.left);
preOrderRecur(root.right);
}
非递归方法:
二叉树遍历所有的方法都可以通过栈结构实现,其中先序遍历是先把根节点押入栈内,然后pop()并记录,然后压入当前节点的右节点和左节点,循环这一过程。
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = root;
stack.push(cur);
while(cur != null || !stack.isE