学习记录=>二叉树的前序、中序、后序遍历查找指定节点
三种遍历,遍历到了就返回,找完了都没找到则输出找不到。
package tree;
/**
* @author wl
* @version 1.0
* @date 2023/6/15 21:18
* @description TODO
**/
public class FindNodeInBinaryTree {
public static void main(String[] args) {
tree.Node root = new tree.Node(1, "宋");
tree.Node node2 = new tree.Node(2, "吴");
tree.Node node3 = new tree.Node(3, "卢");
tree.Node node4 = new tree.Node(4, "林");
tree.Node node5 = new tree.Node(5, "关");
root.left = node2;
root.right = node3;
node3.right = node4;
node3.left = node5;
tree.BinaryTree binaryTree = new tree.BinaryTree(root);
Node target = new Node(4, "test");
System.out.println("前序遍历查找:");
binaryTree.findNodeByInfixNode(target);
System.out.println("中序遍历查找:");
binaryTree.findNodeByInfixNode(target);
System.out.println("后序遍历查找:");
binaryTree.findNodeByPostNode(target);
}
}
class BinaryTree {
tree.Node rootNode;
public BinaryTree(tree.Node rootNode) {
this.rootNode = rootNode;
}
/**
* 前序遍历
*/
public void findNodeByPrefixOrder(Node target) {
Node resNode = rootNode.findNodeByPostOrder(target);
if (resNode == null) {
System.out.println("无匹配的节点");
return;
}
System.out.println("找到了,目标节点是:" + resNode.no + ":" + resNode.name);
}
/**
* 中序遍历
*/
public void findNodeByInfixNode(Node target) {
Node resNode = rootNode.findNodeByPostOrder(target);
if (resNode == null) {
System.out.println("无匹配的节点");
return;
}
System.out.println("找到了,目标节点是:" + resNode.no + ":" + resNode.name);
}
/**
* 后续遍历进行寻找
*/
public void findNodeByPostNode(Node target) {
Node resNode = rootNode.findNodeByPostOrder(target);
if (resNode == null) {
System.out.println("无匹配的节点");
return;
}
System.out.println("找到了,目标节点是:" + resNode.no + ":" + resNode.name);
}
}
/**
* 节点
*/
class Node {
int no;
String name;
tree.Node left;
tree.Node right;
public Node(int no, String name) {
this.no = no;
this.name = name;
}
/**
* 前序遍历查找节点;
*/
public Node findNodeByPreFixOrder(Node target) {
//当前的节点就是要找的节点
if (this.no == target.no) {
return this;
}
Node resNode = null;
if (this.left != null) {
resNode = this.left.findNodeByPreFixOrder(target);
}
if (resNode != null) {
return resNode;
}
if (this.right != null) {
resNode = this.right.findNodeByPreFixOrder(target);
}
if (resNode != null) {
return resNode;
}
//找不到,则返回
return null;
}
/**
* 中序遍历查找节点;
*/
public Node findNodeByInfixOrder(Node target) {
Node resNode = null;
if (this.left != null) {
resNode = this.left.findNodeByPreFixOrder(target);
}
if (resNode != null) {
return resNode;
}
if (this.no == target.no) {
return this;
}
if (this.right != null) {
resNode = this.right.findNodeByPreFixOrder(target);
}
if (resNode != null) {
return resNode;
}
return null;
}
/**
* 后续遍历查找节点;
*/
public Node findNodeByPostOrder(Node target) {
Node resNode = null;
if (this.left != null) {
resNode = this.left.findNodeByPreFixOrder(target);
}
if (resNode != null) {
return resNode;
}
if (this.right != null) {
resNode = this.right.findNodeByPreFixOrder(target);
}
if (resNode != null) {
return resNode;
}
if (this.no == target.no) {
return this;
}
return null;
}
}