算法day05

62 阅读1分钟

1.二叉树前中后序遍历非递归实现

public void preOrderUnRecur(TreeNode root){
    if(root==null) return;
    Stack<TreeNode> stack = new Stack<>();
    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 void InOrderUnRecur(TreeNode root){
    if(root==null) return;
    Stack<TreeNode> stack1 = new Stack<>();
    TreeNode node = root;
    while (!stack1.isEmpty() || node!=null){
        if (node!=null){
            stack1.push(node);
            node = node.left;
        }else {
            node = stack1.pop();
            System.out.println(node.val);
            node = node.right;
        }
    }
}

public void LastOrderUnRecur(TreeNode root){
    if(root==null) return;
    Stack<TreeNode> stack1 = new Stack<>();
    Stack<TreeNode> stack2 = new Stack<>();
    stack1.push(root);
    while (!stack1.isEmpty()){
        TreeNode node = stack1.pop();
        stack2.push(node);
        if(node.left!=null){
            stack1.push(node.left);
        }
        if(node.right!=null){
            stack1.push(node.right);;
        }
    }
    while (!stack2.isEmpty()){
        System.out.println(stack2.pop().val);
    }
}

2.二叉树层序遍历

public void levelOrder(TreeNode root){
    if(root==null) return;
    Queue<TreeNode> queue = new LinkedList<>();
    queue.add(root);
    while (!queue.isEmpty()){
        TreeNode node = queue.poll();
        System.out.println(node.val);
        if(node.left!=null){
            queue.add(node.left);
        }
        if(node.right!=null){
            queue.add(node.right);
        }
    }
}

3.求二叉树最大宽度


public int maxLevelNode(TreeNode root){
    if(root==null) return -1;
    Queue<TreeNode> queue = new LinkedList<>();
    queue.add(root);
    int max = Integer.MIN_VALUE;
    int curLevelNodes = 0;
    int curLevel = 1;
    HashMap<TreeNode, Integer> map = new HashMap<>();
    map.put(root,curLevel);
    while (!queue.isEmpty()){
        TreeNode node = queue.poll();
        if(map.get(node)==curLevel){
            curLevelNodes++;
        }else {
            max = Math.max(curLevelNodes,max);
            curLevelNodes = 1;
            curLevel++;
        }
        if(node.left!=null){
            queue.add(node.left);
            map.put(node.left,curLevel+1);
        }
        if(node.right!=null){
            queue.add(node.right);
            map.put(node.right,curLevel+1);
        }
    }
    return Math.max(max,curLevelNodes);

}