[LeetCode]144. Binary Tree Preorder Traversal&94. Binary Tree Inorder Traversal

来源:互联网 发布:软件测试员有前途吗 编辑:程序博客网 时间:2024/06/16 11:44

144 . Binary Tree Preorder Traversal
Medium

递归:

public List<Integer> preorderTraversal(TreeNode root) {    List<Integer> results = new ArrayList<>();    preorderTraversal(root, results);    return results;}private void preorderTraversal(TreeNode root, List<Integer> results) {    if (root == null)  return;    results.add(root.val);    preorderTraversal(root.left, results);    preorderTraversal(root.right, results);}

栈:

 public List<Integer> preorderTraversal(TreeNode root){    List<Integer> res = new ArrayList<Integer>();    if(root==null) return res;    Stack<TreeNode> stack = new Stack<TreeNode>();    TreeNode tn = root;    while(tn!=null||!stack.isEmpty()){        if(tn!=null){            res.add(tn.val);            if(tn.right!=null)                stack.push(tn.right);            tn = tn.left;        }else{            tn = stack.pop();        }    }    return res;}

莫里斯:

public List<Integer> preorderTraversal(TreeNode root) {    List<Integer> results = new ArrayList<>();    TreeNode crt = root;    while (crt != null) {        if (crt.left == null) {            results.add(crt.val);            crt = crt.right;        } else {            TreeNode temp = crt.left;            while (temp.right != null && temp.right != crt)                 temp = temp.right;            if (temp.right == null) {                results.add(crt.val);                temp.right = crt;                crt = crt.left;            } else {                temp.right = null;                crt = crt.right;            }        }    }    return results;}

94 . Binary Tree Inorder Traversal
Medium

递归:

public List<Integer> inorderTraversal(TreeNode root) {    List<Integer> results = new ArrayList<>();    inorderTraversal(root, results);    return results;}private void inorderTraversal(TreeNode root, List<Integer> results) {    if (root == null) return;    inorderTraversal(root.left, results);    results.add(root.val);    inorderTraversal(root.right, results);}

栈:

public List<Integer> inorderTraversal(TreeNode root) {    List<Integer> results = new ArrayList<>();    ArrayDeque<TreeNode> stack = new ArrayDeque<>();    TreeNode crt = root;    while (!stack.isEmpty() || crt != null) {        if (crt != null) {            stack.push(crt);            crt = crt.left;        } else {            crt = stack.pop();            results.add(crt.val);            crt = crt.right;        }    }    return results;}

莫里斯:

public List<Integer> inorderTraversal(TreeNode root) {    List<Integer> results = new ArrayList<>();    TreeNode crt = root;    while (crt != null) {        if (crt.left == null) {            results.add(crt.val);            crt = crt.right;        } else {            TreeNode temp = crt.left;            while (temp.right != null && temp.right != crt)                 temp = temp.right;            if (temp.right == null) {                temp.right = crt;                crt = crt.left;            } else {                temp.right = null;                results.add(crt.val);                crt = crt.right;            }        }    }    return results;}
0 0
原创粉丝点击