二叉树
前序、中序、后序遍历(递归+非递归)
层序遍历
public void levelTraversal ( TreeNode root) {
ArraryList< Integer> list = new ArrayList < Integer> ( ) ;
if ( root== null)
return ;
Queue< TreeNode> queue = new LinkedList < TreeNode> ( ) ;
queue. add ( root) ;
while ( ! queue. isEmpty) {
TreeNode node = queue. poll ( ) ;
list. add ( node. data) ;
if ( node. left!= null)
queue. add ( node. left) ;
if ( node. right!= null)
queue. add ( node. right) ;
}
for ( int i= 0 ; i< list. size ( ) ; i++ ) {
System. out. print ( list. get ( i) + " " ) ;
}
}
深度
public int depth ( TreeNode root) {
if ( root== null) {
return 0 ;
}
else {
int leftNum = depth ( root. left) ;
int rightNum = depth ( root. right) ;
return Math. max ( leftNum, rightNum) + 1 ;
}
}
判断是否为叶子节点
public boolean isLeaves ( TreeNode root) {
return node. left== null&& node. right== null;
}
节点个数(递归)
计算节点个数可用各种遍历
public int numNode ( TreeNode root) {
if ( root== null) {
return 0 ;
}
int n = 1 ;
if ( isLeaves ( root) ) {
return n;
}
n+= numNode ( root. left) ;
n+= numNode ( root. right) ;
return n;
}
叶子节点个数
public numLeaves ( TreeNode root) {
return root!= null? num ( root) : 0 ;
}
public int num ( TreeNode node) {
int n= 0 ;
if ( node. left!= null) {
n+= isLeaves ( node. left) ? 1 : num ( node. left) ;
}
if ( node. right!= null) {
n+= isLeaves ( node. right) ? 1 : num ( node. right) ;
}
return n;
}