二叉树的遍历方式一共有四种
其中前中后序遍历采用了递归的方式进行
/**
* 中序遍历
*
* @param treeNode
*/
public void inOrder(TreeNode treeNode) {
if (treeNode != null) {
inOrder(treeNode.getLeftTreeNode());
System.out.print(" " + treeNode.getValue() + " ");
inOrder(treeNode.getRightTreeNode());
}
}
/**
* 后序遍历
*
* @param treeNode
*/
public void afterOrder(TreeNode treeNode) {
if (treeNode != null) {
afterOrder(treeNode.getLeftTreeNode());
afterOrder(treeNode.getRightTreeNode());
System.out.print(" " + treeNode.getValue() + " ");
}
}
/**
* 先序遍历
*
* @param treeNode
*/
public void beforeOrder(TreeNode treeNode) {
if (treeNode != null) {
System.out.print(" " + treeNode.getValue() + " ");
beforeOrder(treeNode.getLeftTreeNode());
beforeOrder(treeNode.getRightTreeNode());
}
}
最后再给大家介绍一下层序遍历
具体步骤如下:
- 首先申请一个新的队列,记为queue;
- 将头结点head压入queue中;
- 每次从queue中出队,记为node,然后打印node值,如果node左孩子不为空,则将左孩子入队;如果node的右孩子不为空,则将右孩子入队;
- 重复步骤3,直到queue为空。
/**
* 层次遍历
*/
public void levelOrder(){
LinkedList<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
root = queue.pop();
System.out.print(root.getValue() + " ");
if(root.getLeftreeNode() !=null) {
queue.add(root.getLeftreeNode());
}
if (root.getRigthTreeNode() !=null) {
queue.add(root.getRigthTreeNode());
}
}
}
二叉树的查找
1.定义一个指针指向根节点,如果指针指向的节点不等于我们的值,那么我们就一直循环去寻找。
2.指针指向的数据和我们要查找的值进行比较,如果我们查找的数据比当前值小,指针指向当前节点的左孩子
如果我们查找的数据比当前值大,指针指向当前节点的右孩子
3.如果没有找打那么就返回 null
/**
* 数据查找
* @param value
* @return
*/
public TreeNode find(int value) {
//定义一个指针指向根节点
TreeNode currentNode = root;
while (currentNode.getValue() != value) {
if(value < currentNode.getValue()) {
currentNode = currentNode.getLeftreeNode();
}else {
currentNode = currentNode.getRigthTreeNode();
}
if( currentNode == null ) {
return null;
}
}
return currentNode;
}