求根节点到x节点的路径问题
作者:互联网
题目:求根结点到x结点的路径(假定结点不重复)
输入样例
输入一行字符序列先序递归构建二叉树。每个字符对应一个结点,#表示空结点。第二行输入一个结点值x。
52#3##41##6##
3
输出样例
5 2 3
思路
节点类
class Node{
char val;
Node left;
Node right;
public Node(){
}
}
第一步 首先先序创建一个二叉树
5 为根节点,2为5的左节点,#为空,即2的左节点为空,2的右节点为3,后面跟两个#说明3是一个叶子节点,回溯到根节点5,5的右节点为4,4的左节点为1,1是一个叶子节点,回溯到4,4的右节点为6.
代码实现
public Node createTree(){
Node node;
char ch=this.data.charAt(index);
index++;
if (ch=='#'){
node=null;
}else{
node=new Node();
node.val=ch;
node.left=createTree();//创建子树
node.right=createTree();
}
return node;
}
第二步 用一个栈来装找到对应元素后的回溯路径,然后进行查找,这里采用中序查找。
中序查找的顺序是左 中 右
代码实现
public void find(char val){
this.val=val;
search(root);
print();
}
public boolean search(Node node){
boolean flag=false;
if (node.left!=null)
flag=search(node.left);
flag=flag||node.val==val;
if (flag){
stack.push(node.val);
return true;
}
if (node.right!=null)
flag=search(node.right);
if (flag)
stack.push(node.val);
return flag;
}
完整代码
import java.util.Scanner;
import java.util.Stack;
public class test2 {
static Scanner input=new Scanner(System.in);
public static void main(String[] args) {
String str=input.nextLine();
String str2=input.nextLine();
NewTree tree=new NewTree(str);
tree.find(str2.charAt(0));
}
}
class NewTree{
Node root;
String data;
int index;
char val;
Stack<Character> stack=new Stack<>();
public NewTree(String data){
this.data=data;
root=createTree();
}
public void find(char val){
this.val=val;
search(root);
print();
}
public void print(){
while (stack.size()>0)
{
System.out.print(stack.pop()+" ");
}
}
public boolean search(Node node){
boolean flag=false;
if (node.left!=null)
flag=search(node.left);
flag=flag||node.val==val;
if (flag){
stack.push(node.val);
return true;
}
if (node.right!=null)
flag=search(node.right);
if (flag)
stack.push(node.val);
return flag;
}
public Node createTree(){
Node node;
char ch=this.data.charAt(index);
index++;
if (ch=='#'){
node=null;
}else{
node=new Node();
node.val=ch;
node.left=createTree();//创建子树
node.right=createTree();
}
return node;
}
}
class Node{
char val;
Node left;
Node right;
public Node(){
}
}
标签:node,Node,val,路径,求根,public,flag,节点 来源: https://blog.csdn.net/qq_52510579/article/details/121227752