66.二叉树的前序遍历
描述:
给出一棵二叉树,返回其节点值的前序遍历。
样例:
给出一棵二叉树
{1,#,2,3}
,
1 \ 2 / 3返回
[1,2,3]
.
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: The root of binary tree.
* @return: Preorder in ArrayList which contains node values.
*/
public ArrayList<Integer> preorderTraversal(TreeNode root) {
// write your code here
TreeNode T = root;
ArrayList<Integer> a = new ArrayList<Integer>();
if(T!=null){
Stack s = new Stack();
s.push(T);
while(!s.isEmpty()){
T = (TreeNode)s.pop();
a.add(T.val);
while(T!=null){
if(T.left!=null){
a.add(T.left.val);
}
if(T.right!=null){
s.push(T.right);
}
T = T.left;
}
}
}
return a;
}
}
67.二叉树的中序遍历
描述:
给出一棵二叉树,返回其中序遍历
样例:
给出二叉树
{1,#,2,3}
,
1 \ 2 / 3返回
[1,3,2]
.
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: The root of binary tree.
* @return: Inorder in ArrayList which contains node values.
*/
public ArrayList<Integer> inorderTraversal(TreeNode root) {
// write your code here
TreeNode T = root;
ArrayList<Integer> a = new ArrayList<Integer>();
if(T!=null){
Stack s = new Stack();
s.push(T);
while(!s.isEmpty()){
while(s.peek()!=null){
s.push(((TreeNode)s.peek()).left);
}
s.pop();
if(!s.isEmpty()){
T = ((TreeNode)s.pop());
a.add(T.val);
s.push(T.right);
}
}
}
return a;
}
}
68.二叉树的后序遍历
描述:
给出一棵二叉树,返回其节点值的后序遍历。
样例:
给出一棵二叉树
{1,#,2,3}
,
1 \ 2 / 3
返回 [3,2,1]
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: The root of binary tree.
* @return: Postorder in ArrayList which contains node values.
*/
public ArrayList<Integer> postorderTraversal(TreeNode root) {
// write your code here
TreeNode T = root;
ArrayList<Integer> a = new ArrayList<Integer>();
if(T!=null){
Stack s = new Stack();
s.push(T);
Boolean flag;
TreeNode p = null;
while(!s.isEmpty()){
while(s.peek()!=null){
s.push(((TreeNode)s.peek()).left);
}
s.pop();
while(!s.isEmpty()){
T = (TreeNode)s.peek();
if(T.right==null || T.right==p){
a.add(T.val);
s.pop();
p = T;
flag = true;
}else{
s.push(T.right);
flag = false;
}
if(!flag){
break;
}
}
}
}
return a;
}
}
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: The root of binary tree.
* @return: Postorder in ArrayList which contains node values.
*/
public ArrayList<Integer> postorderTraversal(TreeNode root) {
// write your code here
TreeNode T = root;
ArrayList<Integer> a = new ArrayList<Integer>();
if(T!=null){
Stack s = new Stack();
s.push(T);
Boolean flag;
TreeNode p = null;
while(!s.isEmpty()){
while(s.peek()!=null){
s.push(((TreeNode)s.peek()).left);
}
s.pop();
while(!s.isEmpty()){
T = (TreeNode)s.peek();
if(T.right==null || T.right==p){
a.add(T.val);
s.pop();
p = T;
flag = true;
}else{
s.push(T.right);
flag = false;
}
if(!flag){
break;
}
}
}
}
return a;
}
}
69.二叉树的层次遍历
描述:
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)
样例:
给一棵二叉树
{3,9,20,#,#,15,7}
:
3
/ \
9 20
/ \
15 7
返回他的分层遍历结果:
[
[3],
[9,20],
[15,7]
]
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: The root of binary tree.
* @return: Level order a list of lists of integer
*/
public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
// write your code here
ArrayList<ArrayList<Integer>> array = new ArrayList<ArrayList<Integer>>();
TreeNode T = root;
if(T!=null){
Queue<TreeNode> q = new LinkedList<TreeNode>();
q.offer(T);
while(!q.isEmpty()){
ArrayList<Integer> a = new ArrayList<Integer>();
int size = q.size();
for(int i=0;i<size;i++){
T = (TreeNode)q.poll();
if(T.left!=null){
q.offer(T.left);
}
if(T.right!=null){
q.offer(T.right);
}
a.add(T.val);
}
array.add(a);
}
}
return array;
}
}