构造如下二叉树
前序遍历
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
TreeNode root = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(4);
TreeNode node5 = new TreeNode(5);
TreeNode node6 = new TreeNode(6);
TreeNode node7 = new TreeNode(7);
TreeNode node8 = new TreeNode(8);
TreeNode node9 = new TreeNode(9);
root.left = node2;
root.right = node3;
node2.left = node4;
node2.right = node5;
node5.left = node7;
node5.right = node8;
node3.right = node6;
node6.left = node9;
采用递归方式
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> resultList = new ArrayList<>();
h(resultList, root);
return resultList;
}
public void h(List<Integer> list, TreeNode node) {
if (node == null) {
return;
}
list.add(node.val);
h(list, node.left);
h(list, node.right);
}
}
采用循环(迭代)方式
第一种
TreeNode node = null;
Stack<TreeNode> stack = new Stack<>();
node = root;
while (true) {
while (node != null) {
System.out.println(node.val);
stack.push(node);
node = node.left;
}
if (stack.isEmpty()) {
break;
}
node = stack.pop().right;
}
第二种
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.push(root);
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
System.out.println("" + node.val);
if (node.right != null)
stack.push(node.right);
if (node.left != null)
stack.push(node.left);
}
中序遍历
public static void midderSort(TreeNode tree) {
if (tree == null) {
return;
}
midderSort(tree.left);
System.out.println(tree.val);
midderSort(tree.right);
}
后序遍历
public static void midderSort(TreeNode tree) {
if (tree == null) {
return;
}
midderSort(tree.left);
midderSort(tree.right);
System.out.println(tree.val);
}