`
128kj
  • 浏览: 600260 次
  • 来自: ...
社区版块
存档分类
最新评论

输出给定二叉树的嵌套括号表示(java)

阅读更多
题:对于下图的二叉树,输出其嵌套括号表示


import java.util.*;      
     
public class BinaryTree {      
    protected Node root;      
     
    public BinaryTree(Node root) {      
        this.root = root;      
    }      
     
    public Node getRoot() {      
        return root;      
    }      
     
    /** 构造树 */     
    public static Node init() {      
        Node a = new Node('A');      
        Node b = new Node('B', null, a);      
        Node c = new Node('C');      
        Node d = new Node('D', b, c);      
        Node e = new Node('E');      
        Node f = new Node('F', e, null);      
        Node g = new Node('G', null, f);      
        Node h = new Node('H', d, g);      
        return h;// root      
    }      
     
    /** 访问节点 */     
    public static void visit(Node p) {      
        System.out.print(p.getKey() + " ");      
    }      
     
    /** 递归实现前序遍历 */     
     static void preorder(Node p) {      
        if (p != null) {      
            visit(p);      
            preorder(p.getLeft());      
            preorder(p.getRight());      
        }      
    }      
     
  
  
   /** 层次遍历*/  
   static void levelorder(Node p){      
        if(p==null) return;      
        Queue<Node> queue=new LinkedList<Node>();      
        queue.offer(p);      
        while(queue.size()>0){      
            Node temp=queue.poll();      
            visit(temp);    
            if(temp.getLeft()!=null){      
                queue.offer(temp.getLeft());      
            }      
            if(temp.getRight()!=null){      
                queue.offer(temp.getRight());      
            }      
        }      
          
    }      
  
   
  
  //输出二叉树的嵌套括号表示
  
   static void display(Node tree){
      if(tree!=null){
        System.out.printf("%c",tree.getKey());
        if(tree.getLeft()!=null||tree.getRight()!=null){
            System.out.printf("(");
            display(tree.getLeft());
            if(tree.getRight()!=null)
               System.out.printf(",");
            display(tree.getRight());
            System.out.printf(")");
         }
      }
    }

  
    /**    
     * @param args    
     */     
    public static void main(String[] args) {      
        BinaryTree tree = new BinaryTree(init());      
        display(tree.getRoot());
  
        
    }       
     
}   

  public class Node {      
    private char key;      
    private Node left, right;      
     
    public Node(char key) {      
        this(key, null, null);      
    }      
     
    public Node(char key, Node left, Node right) {      
        this.key = key;      
        this.left = left;      
        this.right = right;      
    }      
     
    public char getKey() {      
        return key;      
    }      
     
    public void setKey(char key) {      
        this.key = key;      
    }      
     
    public Node getLeft() {      
        return left;      
    }      
     
    public void setLeft(Node left) {      
        this.left = left;      
    }      
     
    public Node getRight() {      
        return right;      
    }      
     
    public void setRight(Node right) {      
        this.right = right;      
    }      
}   


程序运行结果:
H(D(B(,A),C),G(,F(E)))
分享到:
评论

相关推荐

    括号匹配问题 数据结构

    本问题的核心是检查给定的一组括号(通常是圆括号"()"、方括号"[]"和大括号"{}")是否按照正确的嵌套规则进行配对。 首先,我们需要理解什么是正确的括号匹配。一个有效的括号序列应该满足以下条件: 1. 打开的括号...

    数据结构-二叉树的建立与遍历 (2).docx

    实验题目要求从给定的括号表示法构建二叉树,并进行先序遍历。 首先,二叉树是一种特殊的树形数据结构,每个节点最多有两个子节点,通常分为左子节点和右子节点。在这个实验中,二叉树的节点由`BiTNode`结构体表示...

    求存在于二叉树中的算数表达式的值的算法

    在给定的标题“求存在于二叉树中的算数表达式的值的算法”中,我们主要关注如何利用二叉树结构来解决计算算术表达式值的问题。描述中提到,一个算术表达式通常由一个运算符和两个操作数组成,而这些操作数自身也可以...

    数据结构实习报告二(二叉树).docx

    二叉树的打印设计使用了广义表的概念,广义表是一种表示嵌套结构的抽象数据类型。在二叉树的打印过程中,根节点位于广义表的开头,左子树和右子树分别以括号包围并用逗号分隔。如果子树不存在,则相应地不打印括号和...

    JAVA符号匹配

    在给定的“JAVA符号匹配”主题中,我们可以深入探讨以下几个知识点: 1. **栈的基本操作**:栈主要有两个基本操作,即压入(push)和弹出(pop)。压入操作将元素添加到栈顶,而弹出操作则从栈顶移除元素。在符号...

    pre-mid-creattree.zip_pre_pre mid

    对于二叉树,广义表通常用一对括号表示节点,再用逗号分隔其左子树和右子树的表示。若节点为空,则用空列表([])表示。 在处理“pre-mid-creattree.zip”这个压缩包中的程序时,我们需要实现一个算法来执行上述...

    java和sql题中英

    }`,表示如果a等于8则执行花括号内的代码块。 - **异常处理**:Java中的异常处理主要通过 `try-catch-finally` 结构来实现。例如: ```java try { // 可能抛出异常的代码 } catch (Exception e) { // 处理异常...

    第四次课.ppt_电子版_ppt版

    例如,一个简单的树可以用嵌套括号表示为ijdfghabcea (b (d, e (i, j)), c (g, h))。 3. **树的术语**: - **结点(node)**:构成树的基本单元。 - **度(degree)**:结点的子树数量。 - **分支(branch)**:...

    复杂逻辑表达式的计算

    4. **二叉树表示法**:另一种方式是构建一个表示逻辑表达式的二叉树。每个节点代表一个操作符或变量,左子树代表左操作数,右子树代表右操作数。通过中缀表达式转二叉树,再用深度优先搜索(DFS)或广度优先搜索...

    数据结构有关树的操作

    嵌套表示法则通过括号来表示层次,而广义表表示法则是以列表的形式表示树结构。 树的基本术语包括节点、出度、入度、树的度等。节点包含数据元素和指向子树的指针,出度是节点拥有的非空子树数量,入度是指向节点的...

    数据结构课程设计 表达式转换

    对于有括号的复杂表达式,我们可能需要构建嵌套的二叉树结构。 接下来,我们详细讨论三种遍历方式: 1. 先序遍历(根-左-右):从根节点开始,首先访问根节点,然后递归地遍历左子树,最后遍历右子树。对于表达式...

    近20年真题811数据结构

    给定的二叉树算法涉及到节点的左右子节点的重新连接,可能是树的某种变形或操作。分析算法的功能,理解栈在过程中的作用,以及算法执行后二叉树的变化,是解答这类问题的关键。 8. **Floyd算法**: Floyd-...

    2013-2018计算机考研资料(考研代码:831)

    - **数据结构与存储:** 数据结构在计算机内存中的表示即数据的存储结构,这是指数据元素在计算机中的存储方式,包括顺序存储、链式存储等。 - **栈的存储结构:** 栈是一种特殊的线性表,它只允许在一端进行插入和...

    2012计算机考研真题及答案1

    对于给定的中缀表达式`a+b-a*((c d)/e-f)+g`,最大的操作符个数会在处理括号嵌套时达到,例如在处理`((c d)/e)`时。这里最多会有5个操作符同时在栈中:`(`、`*`、`/`、`d`、`c`。但注意,`d`和`c`是操作数而非操作符...

    三月全国计算机等级考试二级C语言笔试试题.pdf

    - 在给定的程序中,输入的值在大于3且不等于10的整数范围内才会输出。 18. **嵌套if语句**: - 此程序会根据条件打印a、b、c的值,当a等于1且b等于2且c等于3时,打印语句才会执行。 19. **逻辑运算与条件判断**...

    2012年计算机统考+标准答案+评分参考

    - 在这个过程中,由于表达式中含有嵌套的括号,所以在处理括号时栈中的操作符数量会增加。 - 最终,在处理表达式中的 `-` 和 `(` 时,栈中的操作符数量会达到最大,此时栈中会有 `+`、`-`、`*`、`(` 和 `(`,共五个...

    王道2013模拟试题打印版1

    题目中提到的表达式需要分析其括号嵌套关系以确定是否可能导致栈溢出。 4. **栈的性质**:第3题涉及字符串"ooops"的入栈和出栈顺序。由于栈的特性,不同的入栈顺序可能会产生相同的出栈顺序,题目询问有多少种出栈...

Global site tag (gtag.js) - Google Analytics