/**
* 递归实现
*
* @param root
* @return
*/
public static List<Integer> midOrder(TreeNode root) {
List<Integer> res = new ArrayList<>();
minOrder(root, res);
return res;
}
public static void minOrder(TreeNode root, List<Integer> res) {
if (root == null) {
return;
}
minOrder(root.left, res);
res.add(root.val);
minOrder(root.right, res);
}
/**
* 非递归实现
*
* @param root
* @return
*/
public static List<Integer> midOrder2(TreeNode root) {
Stack<TreeNode> stack = new Stack<TreeNode>();
List<Integer> list = new ArrayList<>();
stack.add(root);
while (!stack.isEmpty()) {
TreeNode pop = stack.pop();
if (pop != null) {
stack.add(pop);
stack.add(pop.left);
} else if (!stack.isEmpty()) {
TreeNode pop1 = stack.pop();
list.add(pop1.val);
stack.add(pop1.right);
}
}
return list;
}
public static void main(String[] args) {
TreeNode treeNode15 = new TreeNode(15, null, null);
TreeNode treeNode7 = new TreeNode(7, null, null);
TreeNode treeNode20 = new TreeNode(20, treeNode15, treeNode7);
TreeNode treeNode9 = new TreeNode(9, null, null);
TreeNode treeNode3 = new TreeNode(3, treeNode9, treeNode20);
List<Integer> list = midOrder(treeNode3);
list.stream().forEach(b -> {
System.out.println(b);
});
System.out.println("=======");
List<Integer> list2 = midOrder2(treeNode3);
list.stream().forEach(b -> {
System.out.println(b);
});
}
二叉树的中序遍历
于 2022-08-27 09:43:40 首次发布
1133

被折叠的 条评论
为什么被折叠?



