ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

求根节点到x节点的路径问题

2021-11-09 15:00:06  阅读:153  来源: 互联网

标签:node Node val 路径 求根 public flag 节点


题目:求根结点到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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有