zoukankan      html  css  js  c++  java
  • 第4题:在二叉树中找出和为某一值的所有路径

    欢迎转载,转载请务必注明出处:http://blog.csdn.net/alading2009/article/details/44725559

    第4题:输入一个整数和一颗二叉树。从树的根节点开始往下访问一直到叶结点所经过的结点形成一条路径。打印出和与输入整数相等的所有路径。
    要求:无

    涉及到树的算法大多采用递归实现,此处很明显需要一个遍历,每一次递归都要把之前已经获得的信息带下去,这样到达符合要求的叶子结点时就可以打印路径了。

    代码:

    package test004;
    
    /**
     * Created by cq on 2015/3/29.
     * 二叉树结点的定义
     */
    public class Node {
        private int value;
        private Node left;
        private Node right;
        public Node(int value){
            this.value = value;
            left = null;
            right = null;
        }
        public Node getRight() {
            return right;
        }
    
        public void setRight(Node right) {
            this.right = right;
        }
    
        public int getValue() {
            return value;
        }
    
        public void setValue(int value) {
            this.value = value;
        }
    
        public Node getLeft() {
            return left;
        }
    
        public void setLeft(Node left) {
            this.left = left;
        }
    }
    
    package test004;
    
    /**
     * Created by cq on 2015/3/29.
     * 第四题:输入一个整数和一颗二叉树。从树的根节点开始往下访问一直到叶结点所经过的结点
     *        形成一条路径。打印出和与输入整数相等的所有路径。
     * 要求:  无
     * 注:   二叉树结点的值不一定有序,极端情况下所有节点都要遍历到
     */
    public class PathOfTree {
        public static void getPathOfBTree(int num, Node tree){
            pathOfBTree(num,tree,"");
        }
        public static void pathOfBTree(int num, Node tree, String path){
            if (tree == null || tree.getValue() > num){
                return;
            }
            if (tree.getLeft() == null && tree.getRight() == null && tree.getValue() == num){
                System.out.println(path+tree.getValue());
                return;
            }
            pathOfBTree(num-tree.getValue(), tree.getLeft(), path+tree.getValue()+" ");
            pathOfBTree(num-tree.getValue(), tree.getRight(), path+tree.getValue()+" ");
        }
        public static void main(String[] args){
            Node n1 = new Node(10);
            Node n2 = new Node(5);
            Node n3 = new Node(12);
            Node n4 = new Node(4);
            Node n5 = new Node(7);
            n1.setLeft(n2);
            n1.setRight(n3);
            n2.setLeft(n4);
            n2.setRight(n5);
    
            PathOfTree.getPathOfBTree(22,n1);
        }
    }

    执行结果:

    Connected to the target VM, address: '127.0.0.1:60410', transport: 'socket'
    Disconnected from the target VM, address: '127.0.0.1:60410', transport: 'socket'
    10 5 7
    10 12
    
    Process finished with exit code 0
  • 相关阅读:
    记一次线上Kafka消息堆积踩坑总结
    golang Time to String
    转MongoDB 使用Skip和limit分页
    golang mongodb (mgo)插入或读取文档的字段值为空(nil)问题解决
    Golang 中操作 Mongo Update 的方法
    基础知识
    Linux安全之SSH 密钥创建及密钥登录
    ssh配置authorized_keys后仍然需要输入密码的问题
    SSH隧道技术----端口转发,socket代理
    社会信息化环境下的IT新战略
  • 原文地址:https://www.cnblogs.com/read-the-spring-and-autumn-annals-in-night/p/12041992.html
Copyright © 2011-2022 走看看