力扣简94 二叉树的中序遍历++
直接看的题解,但是这种递归法有点慢。

ArrayList 泛型 https://www.cnblogs.com/lwbqqyumidi/p/3837629.html
package leetcode01; /*如果你的代码中写了 List<Student> stuList = new ArrayList<Student>(); * 系统可能默认给你导入 import java.swt.*;包。此时需要将这个包改为 import java.util.*;因为List是属于util包*/ import java.util.List; import java.util.ArrayList; import java.util.LinkedList; class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left; this.right = right; } } public class Solution94 { //写list这个容器就不会用,而且也没啥思路,看到树心里就发怵,所以直接看了题解。 public static List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); inorder(root, res); return res; } public static void inorder(TreeNode head,List<Integer> res) { if(head==null) { return; } else{ inorder(head.left, res); res.add(head.val); inorder(head.right, res); } } public static void main(String[] args) { // TODO Auto-generated method stub TreeNode root=new TreeNode(1,null,new TreeNode(2,new TreeNode(3),null)); System.out.println(inorderTraversal(root)); } }
//迭代 题解2 public static List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); System.out.println(res); Deque<TreeNode> stk=new LinkedList<TreeNode>(); if(root==null) { return res; } while(root!=null||!stk.isEmpty()) { while(root!=null) { stk.push(root); root=root.left; } root=stk.pop(); res.add(root.val); root=root.right; } return res; }
题解3 就看了一下,像穿针引线法。

//这看了答案也写不出来哇 先放在这 有问题 多看看吧没办法
public static List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); TreeNode predecessor = null; while (root != null) { if (root.left != null) { // predecessor 节点就是当前 root 节点向左走一步,然后一直向右走至无法走为止 predecessor = root.left; while (predecessor.right != null && predecessor.right != root) { predecessor = predecessor.right; } // 让 predecessor 的右指针指向 root,继续遍历左子树

浙公网安备 33010602011771号