三种遍历方式
#include <iostream>
#include <vector>
using namespace std;
struct TreeNode {
int val;
TreeNode * left;
TreeNode * right;
TreeNode ( int x) : val ( x) , left ( NULL ) , right ( NULL ) { }
} ;
void traversal ( TreeNode * node) {
if ( ! node) {
return ;
}
traversal ( node- > left) ;
traversal ( node- > right) ;
}
void traversal_print1 ( TreeNode * node, int layer) {
if ( ! node) {
return ;
}
traversal_print1 ( node- > left, layer + 1 ) ;
for ( int i = 0 ; i < layer; i++ ) {
printf ( "-----" ) ;
}
printf ( "[%d]\n" , node- > val) ;
traversal_print1 ( node- > right, layer + 1 ) ;
}
void traversal_print2 ( TreeNode * node, int layer) {
if ( ! node) {
return ;
}
traversal_print2 ( node- > left, layer + 1 ) ;
traversal_print2 ( node- > right, layer + 1 ) ;
for ( int i = 0 ; i < layer; i++ ) {
printf ( "-----" ) ;
}
printf ( "[%d]\n" , node- > val) ;
}
void traversal_print3 ( TreeNode * node, int layer) {
if ( ! node) {
return ;
}
for ( int i = 0 ; i < layer; i++ ) {
printf ( "-----" ) ;
}
printf ( "[%d]\n" , node- > val) ;
traversal_print3 ( node- > left, layer + 1 ) ;
traversal_print3 ( node- > right, layer + 1 ) ;
}
int main ( ) {
TreeNode a ( 1 ) ;
TreeNode b ( 2 ) ;
TreeNode c ( 5 ) ;
TreeNode d ( 3 ) ;
TreeNode e ( 4 ) ;
TreeNode f ( 6 ) ;
a. left = & b;
a. right = & c;
b. left = & d;
b. right = & e;
c. right = & f;
traversal_print1 ( & a, 0 ) ;
printf ( "\n" ) ;
traversal_print2 ( & a, 0 ) ;
printf ( "\n" ) ;
traversal_print3 ( & a, 0 ) ;
printf ( "\n" ) ;
return 0 ;
}
输出
-- -- -- -- -- [ 3 ]
-- -- - [ 2 ]
-- -- -- -- -- [ 4 ]
[ 1 ]
-- -- - [ 5 ]
-- -- -- -- -- [ 6 ]
-- -- -- -- -- [ 3 ]
-- -- -- -- -- [ 4 ]
-- -- - [ 2 ]
-- -- -- -- -- [ 6 ]
-- -- - [ 5 ]
[ 1 ]
[ 1 ]
-- -- - [ 2 ]
-- -- -- -- -- [ 3 ]
-- -- -- -- -- [ 4 ]
-- -- - [ 5 ]
-- -- -- -- -- [ 6 ]