前序遍历
package 树的遍历;
import java. util. Stack;
public class 前序遍历 {
public static class TreeNode {
int val = 0 ;
TreeNode left = null;
TreeNode right = null;
public TreeNode ( int val) {
this . val = val;
}
boolean flag= false ;
boolean leftflag = false ;
boolean rightflag= false ;
}
public static class Solution {
public void PreOeder ( TreeNode node) {
if ( node== null) return ;
System. out. println ( node. val) ;
PreOeder ( node. left) ;
PreOeder ( node. right) ;
return ;
}
public void PreOrder2 ( TreeNode head) {
Stack< TreeNode> stack = new Stack < TreeNode> ( ) ;
TreeNode node = head;
while ( node!= null|| ! stack. isEmpty ( ) ) {
while ( node!= null) {
System. out. println ( node. val) ;
stack. push ( node) ;
node= node. left;
}
if ( ! stack. isEmpty ( ) ) {
node= stack. pop ( ) ;
node= node. right;
}
}
}
}
public static void main ( String[ ] args) {
int num[ ] = new int [ ] { 1 , 2 , 3 , 4 , 5 , 6 , 7 } ;
TreeNode head = new TreeNode ( num[ 0 ] ) ;
TreeNode node1 = new TreeNode ( num[ 1 ] ) ;
TreeNode node2 = new TreeNode ( num[ 2 ] ) ;
head. left= node1;
head. right= node2;
TreeNode node3 = new TreeNode ( num[ 3 ] ) ;
TreeNode node4 = new TreeNode ( num[ 4 ] ) ;
node1. left= node3;
node1. right= node4;
TreeNode node5 = new TreeNode ( num[ 5 ] ) ;
TreeNode node6 = new TreeNode ( num[ 6 ] ) ;
node2. left= node5;
node2. right= node6;
Solution solution = new Solution ( ) ;
solution. PreOrder2 ( head) ;
}
}
中序遍历
package 树的遍历;
import java. util. Stack;
public class 中序遍历 {
public static class TreeNode {
int val = 0 ;
TreeNode left = null;
TreeNode right = null;
public TreeNode ( int val) {
this . val = val;
}
boolean flag= false ;
boolean leftflag = false ;
boolean rightflag= false ;
}
public static class Solution {
public void InOrder ( TreeNode node) {
if ( node== null) return ;
InOrder ( node. left) ;
System. out. println ( node. val) ;
InOrder ( node. right) ;
}
public void InOrder2 ( TreeNode head) {
Stack< TreeNode> stack = new Stack < TreeNode> ( ) ;
TreeNode node = head;
while ( node!= null|| ! stack. isEmpty ( ) ) {
while ( node!= null) {
stack. push ( node) ;
node= node. left;
}
if ( ! stack. isEmpty ( ) ) {
node = stack. pop ( ) ;
System. out. println ( node. val) ;
node= node. right;
}
}
}
}
public static void main ( String[ ] args) {
int num[ ] = new int [ ] { 1 , 2 , 3 , 4 , 5 , 6 , 7 } ;
TreeNode head = new TreeNode ( num[ 0 ] ) ;
TreeNode node1 = new TreeNode ( num[ 1 ] ) ;
TreeNode node2 = new TreeNode ( num[ 2 ] ) ;
head. left= node1;
head. right= node2;
TreeNode node3 = new TreeNode ( num[ 3 ] ) ;
TreeNode node4 = new TreeNode ( num[ 4 ] ) ;
node1. left= node3;
node1. right= node4;
TreeNode node5 = new TreeNode ( num[ 5 ] ) ;
TreeNode node6 = new TreeNode ( num[ 6 ] ) ;
node2. left= node5;
node2. right= node6;
Solution solution = new Solution ( ) ;
solution. InOrder2 ( head) ;
}
}
后序遍历
package 树的遍历;
import java. util. Stack;
public class 后序遍历 {
public static class TreeNode {
int val = 0 ;
TreeNode left = null;
TreeNode right = null;
public TreeNode ( int val) {
this . val = val;
}
boolean flag= false ;
boolean leftflag = false ;
boolean rightflag= false ;
}
public static class Solution {
public void PostOrder ( TreeNode node) {
if ( node== null) return ;
PostOrder ( node. left) ;
PostOrder ( node. right) ;
System. out. println ( node. val) ;
}
public void PostOrder2 ( TreeNode head) {
Stack< TreeNode> stack = new Stack < TreeNode> ( ) ;
TreeNode node = head;
while ( node!= null|| ! stack. isEmpty ( ) ) {
while ( node!= null&& node. leftflag== false ) {
stack. push ( node) ;
node. leftflag= true ;
node= node. left;
}
if ( ! stack. isEmpty ( ) ) {
node= stack. peek ( ) ;
if ( node. rightflag== false ) {
node. rightflag= true ;
node= node. right;
} else {
node= stack. pop ( ) ;
System. out. println ( node. val) ;
if ( ! stack. isEmpty ( ) ) {
node= stack. peek ( ) ;
}
}
}
}
}
}
public static void main ( String[ ] args) {
int num[ ] = new int [ ] { 1 , 2 , 3 , 4 , 5 , 6 , 7 } ;
TreeNode head = new TreeNode ( num[ 0 ] ) ;
TreeNode node1 = new TreeNode ( num[ 1 ] ) ;
TreeNode node2 = new TreeNode ( num[ 2 ] ) ;
head. left= node1;
head. right= node2;
TreeNode node3 = new TreeNode ( num[ 3 ] ) ;
TreeNode node4 = new TreeNode ( num[ 4 ] ) ;
node1. left= node3;
node1. right= node4;
TreeNode node5 = new TreeNode ( num[ 5 ] ) ;
TreeNode node6 = new TreeNode ( num[ 6 ] ) ;
node2. left= node5;
node2. right= node6;
Solution solution = new Solution ( ) ;
solution. PostOrder2 ( head) ;
}
}
层序遍历
package 树的遍历;
import java. util. LinkedList;
import java. util. Queue;
public class 层序遍历 {
public static class TreeNode {
int val = 0 ;
TreeNode left = null;
TreeNode right = null;
public TreeNode ( int val) {
this . val = val;
}
boolean flag= false ;
boolean leftflag = false ;
boolean rightflag= false ;
}
public static class Solution {
public void CeOrder ( TreeNode node) {
if ( node== null) return ;
}
public void CeOrder2 ( TreeNode head) {
Queue< TreeNode> queue = new LinkedList < TreeNode> ( ) ;
queue. offer ( head) ;
TreeNode node;
while ( ! queue. isEmpty ( ) ) {
node= queue. poll ( ) ;
System. out. println ( node. val) ;
if ( node. left!= null) {
queue. offer ( node. left) ;
}
if ( node. right!= null) {
queue. offer ( node. right) ;
}
}
}
}
public static void main ( String[ ] args) {
int num[ ] = new int [ ] { 1 , 2 , 3 , 4 , 5 , 6 , 7 } ;
TreeNode head = new TreeNode ( num[ 0 ] ) ;
TreeNode node1 = new TreeNode ( num[ 1 ] ) ;
TreeNode node2 = new TreeNode ( num[ 2 ] ) ;
head. left= node1;
head. right= node2;
TreeNode node3 = new TreeNode ( num[ 3 ] ) ;
TreeNode node4 = new TreeNode ( num[ 4 ] ) ;
node1. left= node3;
node1. right= node4;
TreeNode node5 = new TreeNode ( num[ 5 ] ) ;
TreeNode node6 = new TreeNode ( num[ 6 ] ) ;
node2. left= node5;
node2. right= node6;
Solution solution = new Solution ( ) ;
solution. CeOrder2 ( head) ;
}
}