首页 > 其他 > 详细

Tree traversal

时间:2021-09-17 14:23:31      阅读:18      评论:0      收藏:0      [点我收藏+]
public 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;
    }
}

二叉树前序遍历(非递归)

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> result  = new ArrayList();
        if(root==null) return result;
        Stack<TreeNode> stack = new Stack();
        stack.push(root);
        while(!stack.isEmpty()){
            TreeNode temp  = stack.pop();
            result.add(temp.val);
       //因为遍历是先左后右,所以压栈的时候要先右后左
if(temp.right!=null) stack.push(temp.right); if(temp.left!=null) stack.push(temp.left); } return result; } }

二叉树中序遍历(非递归)

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> result  = new ArrayList();
        if(root==null) return result;
        Stack<TreeNode> stack = new Stack();
        while(root!=null || !stack.isEmpty()){
            //一直向左走到头,先处理左侧节点
            while(root!=null){
                stack.push(root);
                root=root.left;
            }
            //输出当前栈顶元素
            root = stack.pop();
            result.add(root.val);
            //当前节点压入后,开始处理右侧节点  --这步总出错
            root=root.right; 
        }
        return result;        
    }
}

二叉树后序遍历(非递归)

 实际上后序遍历,只需要在先序遍历基础上稍作修改即可。

先序遍历:root -> 左 -> 右   先右后左的后序遍历: 右 -> 左 -> root

class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList();
        if(root==null) return result;
        Stack<TreeNode> stack  = new Stack();
        stack.push(root);
        while(!stack.isEmpty()){
            TreeNode temp = stack.pop();
            //此处确保倒序
       result.add(
0,temp.val); if(temp.left!=null) stack.push(temp.left); if(temp.right!=null) stack.push(temp.right); } return result; } }

 

Tree traversal

原文:https://www.cnblogs.com/cynrjy/p/15291535.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!