Z 字型打印二叉树
/** * Definition for a binary tree node. * 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<List<Integer>> zigzagLevelOrder(TreeNode root) { Stack<TreeNode> stack1 = new Stack<>(); Stack<TreeNode> stack2 = new Stack<>(); if (root == null){ return new ArrayList<>(); } stack1.push(root); List<List<Integer>> result = new ArrayList<>(); while(!stack1.empty()){ List<Integer> list1 = new ArrayList<>(); while(!stack1.empty()){ TreeNode item = stack1.pop(); list1.add(item.val); if (item.left != null){ stack2.push(item.left); } if (item.right != null){ stack2.push(item.right); } } result.add(list1); List<Integer> list2 = new ArrayList<>(); while (!stack2.empty()){ TreeNode item = stack2.pop(); list2.add(item.val); if (item.right != null){ stack1.push(item.right); } if (item.left != null){ stack1.push(item.left); } } if (!list2.isEmpty()){ result.add(list2); } } return result; }}
114 前序二叉树O(1)转链表
public TreeNode digui(TreeNode root){
if (root == null){
return null;
}
if (root.left == null && root.right == null){
return root;
}
TreeNode nodeLeft = null;
TreeNode nodeRight = null;
if (root.left != null){
nodeLeft = digui(root.left);
}
if (root.right != null){
nodeRight = digui(root.right);
}
if (nodeLeft != null){
nodeLeft.right = root.right;
root.right = root.left;
}
root.left = null;
if (nodeRight != null){
return nodeRight;
}
return nodeLeft;
}