1、前序遍历:
public static void preOrder(Node root) {
if (root==null) {
return;
}
System.out.println(root.val + " ");
preOrder(root.left);
preOrder(root.right);
}
2、中序遍历
public static void inOrder(Node root) {
if (root==null) {
return;
}
inOrder(root.left);
System.out.println(root.val + " ");
inOrder(root.right);
}
3、后序遍历
public static void postOrder(Node root) {
if (root == null) {
return;
}
postOrder(root.left);
postOrder(root.right);
System.out.println(root.val+ " ");
}
4、求一棵树中的结点个数
(1)、使用静态变量
public static int size = 0;
public static void size(Node root) {
if (root==null) {
return;
}
size++;
size(root.left);
size(root.right);
}
(2)、不使用静态变量
public static int size2(Node root) {
if (root==null) {
return 0;
}
return 1 + size2(root.left) + size2(root.right);
}
5、求叶子结点个数
(1)、使用静态变量
public static int leafSize = 0;
public static void leafSize(Node root) {
if (root==null) {
return;
}
if (root.right==null&&root.left==null) {
leafSize++;
}
leafSize(root.left);
leafSize(root.right);
}
(2)、不使用静态变量
public static int leafSize2(Node root) {
if (root==null) {
return 0;
}
return leafSize2(root.left) + leafSize2(root.right);
}
6、求第k层结点个数
public static int kLevelSize(Node root, int k) {
if (k<1||root==null) {
return 0;
}
if (k==1) {
return 1;
}
return kLevelSize(root.left,k-1) + kLevelSize(root.right,k-1);
}
7、树种是否包含某个元素
(1)、使用静态变量
public static Node result = null;
public static void find(Node root, char toFind) {
if (root==null) {
return;
}
if (root.val==toFind) {
result = root;
return;
}
find(root.left,toFind);
find(root.right,toFind);
}
(2)、不使用静态变量
public static Node find2(Node root, char toFind) {
if (root==null) {
return null;
}
if (root.val==toFind) {
return root;
}
Node result = find2(root.left,toFind);
if (result!=null) {
return result;
}
return find2(root.right,toFind);
}