zoukankan      html  css  js  c++  java
  • 二叉树的创建与遍历

         此时有这样一棵树,其先序遍历:ABCDEFGH;中序遍历:CBEDFAGH;后序遍历:CEFDBHGA;想要以输入结点的方式来创建树。可以考虑一个节点创建成功在创建其左右结点,若其左右结点为空,则返回至上一个结点继续创建,直到创建完毕。

    创建树的结点:

    class BNode{
        private BNode leftChild;
        private BNode rightChild;
        private char data;
        public BNode() {
        }
        public BNode(char data){
            this.data = data;
        }
        public BNode(BNode leftChild,BNode rightChild,char data){
            this.leftChild = leftChild;
            this.rightChild = rightChild;
            this.data = data;
        }
        public BNode getLeftChild() {
            return leftChild;
        }
    
        public void setLeftChild(BNode leftChild) {
            this.leftChild = leftChild;
        }
    
        public BNode getRightChild() {
            return rightChild;
        }
    
        public void setRightChild(BNode rightChild) {
            this.rightChild = rightChild;
        }
    
        public char getData() {
            return data;
        }
    
        public void setData(char data) {
            this.data = data;
        }
    }

    创建树以及遍历树:

    class BTree{
        private BNode root ;
        private int i  ;
        private String str;   //输入字符串
        private Scanner scanner;
        public BTree(){
            this.root = null;
            this.i = 0;
            this.str = null;
            this.scanner = new Scanner(System.in);
        }
    
        public void PreOrder() {   //先序遍历
            System.out.println("前序遍历: ");
            PreOrder(root);
            System.out.println();
        }
    
        private void PreOrder(BNode root) {
            if(root != null){
                System.out.print(root.getData()+" ");
                PreOrder(root.getLeftChild());
                PreOrder(root.getRightChild());
            }
        }
    
        public void InOrder() {    //中序遍历
            System.out.println("中序遍历: ");
            InOrder(root);
            System.out.println();
        }
    
        private void InOrder(BNode root) {
            if(root != null){
                InOrder(root.getLeftChild());
                System.out.print(root.getData()+" ");
                InOrder(root.getRightChild());
            }
        }
    
        public void PastOrder() {   //后序遍历
            System.out.println("后序遍历: ");
            PastOrder(root);
            System.out.println();
        }
    
        private void PastOrder(BNode root) {
            if(root != null){
                PastOrder(root.getLeftChild());
                PastOrder(root.getRightChild());
                System.out.print(root.getData()+" ");
            }
        }
    
        public void CreatTree(){  //创建树  (根据先序遍历顺序创建)
             root = CreatTreeA();
        }
        private void add(){
            i +=1;
        }
        public void SysIn(){
            str = scanner.next();
        }
        private BNode CreatTreeA(){
            char a ;
            BNode root = null;
            //1.读入元素
            a = str.charAt(i);
            add();
            //如果不等于'#',创建该节点,并且创建其左右孩子
            if (a != '#') {
                root = new BNode(a);
                root.setLeftChild(CreatTreeA());
                root.setRightChild(CreatTreeA());
            }
            // 否则,return root。
            return root;
    
        }
    
    }
    public class BinaryTreeDemo {
        public static void main(String[] args) {
            BTree bTree = new BTree();
            System.out.println("请输入创建树的节点:");
            bTree.SysIn();     //输入ABC##DE##F##G#H##
            bTree.CreatTree();   //创建树
            //遍历
            bTree.PreOrder();
            bTree.InOrder();
            bTree.PastOrder();
        }
    }

             其中#表示root节点的左右孩子。

  • 相关阅读:
    poj1703
    poj 2385
    poj 3169 差分约束
    poj3723 最大权森林
    POJ3255 次短路
    图论算法----最小生成树
    给linux操作系统安装中文环境
    Windows下使用python
    pku3668 Game of Lines
    pku3670 Eating Together
  • 原文地址:https://www.cnblogs.com/128-cdy/p/12535792.html
Copyright © 2011-2022 走看看