- 浏览: 603976 次
- 来自: ...
文章分类
最新评论
-
lgh1992314:
相同的元素呢
一种离散化方法 -
HelloSummerR:
圆心的位置是随机的,于是圆的部分会落到canvas外,那样就显 ...
HTML5 Canvas学习笔记(1)处理鼠标事件 -
hlstudio:
好久没见到sokuban了,这有个java版的,带源码,可以参 ...
求推箱子的最小步数(java) -
肖泽文:
太好了,谢谢你。。有中文注释!
HTML5 推箱子游戏过关演示动画 -
swm8023:
删除操作,将最后一个叶子节点插入后也有可能上浮吧
彻底弄懂最大堆的四种操作(图解+程序)(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 swapTree(Node root){ if(root != null) { Node tmp = root.getLeft(); root.setLeft(root.getRight()); root.setRight(tmp); swapTree(root.getLeft()); swapTree(root.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()); System.out.printf("\n\n"); swapTree(tree.getRoot()); 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)))
H(G(F(,E)),D(C,B(A)))
下载源码:
- ex113322.zip (1.2 KB)
- 下载次数: 2
发表评论
-
求二叉树上任意两个节点的最近公共父节点
2013-01-09 10:24 2403北大百练题2756: 如上图所示,由正整数1, 2 ... -
JAVA判断二叉树是否是二叉平衡树
2013-01-07 18:59 1988import java.util.*; ... -
大顶堆应用:POJ2010
2012-12-23 20:59 1911POJ2010题意: 奶牛学校招生,c头奶牛报名,要选 ... -
二维树状数组学习之二:练习POJ 1195
2012-12-12 21:40 1399接前文:二维树状数组学习之一:彻底理解http://128kj ... -
二维树状数组学习之一:彻底理解
2012-12-12 20:54 2469当要频繁的对数组元素进行修改,同时又要频繁的查询数组内 ... -
图的深搜+树状数组练习 POJ 3321(JAVA)
2012-12-11 11:13 1843关于树状数组:参看:http://128kj.iteye.co ... -
树状数组练习:POJ 3067
2012-12-09 17:10 1844关于树状数组,参看:http://128kj.iteye.co ... -
树状数组练习:POJ 2481(JAVA)
2012-12-08 18:11 1822关于树状数组,请参考:http://128kj.iteye.c ... -
初步了解树状数组
2012-12-07 14:18 1789一、树状数组是干什么的? 平常我们会遇到一些对数组进 ... -
线段树求逆序数(离散化)POJ 2299
2012-12-06 08:25 2121POJ2299题意: 给出长度为n的序列,每次只能交换 ... -
利用线段树求逆序数(JAVA)
2012-12-04 22:46 2595设A[1…n]是一个包含n个不同数的数组。如果在i< ... -
线段树入门学习(三)懒操作(兼解POJ1823) JAVA
2012-12-02 15:37 2136继续上文"线段树入门学习(二)" ht ... -
线段树入门学习(二)(兼解POJ3468) JAVA
2012-11-30 16:55 2559继续上文http://128kj.iteye. ... -
线段树入门学习(兼解HDU1754)
2012-11-30 11:24 2727先看网上的介绍: 线段树也叫区间树,顾名思义,线段树是 ... -
AVL树及JAVA实现
2012-11-26 16:34 2306一棵AVL树是其每个节点的左子树和右子树的高度最多差1的二 ... -
图解平衡二叉树
2012-11-26 11:34 2064形态匀称的二叉树 ... -
深度优先遍历字典树(统计单词出现的个数)
2012-11-23 22:18 2855例:给出一个字符文本,每行一个字符串,统计不同的字符串出现的百 ... -
学习使用字典树(JAVA)
2012-11-22 09:25 2147字典树 又称单词 ... -
彻底弄懂最大堆的四种操作(图解+程序)(JAVA)
2012-11-17 21:50 18732堆有最大堆和最小堆之分,最大堆就是每个节点的值都>= ... -
并查集入门精讲,实例2个(JAVA)
2012-10-30 14:47 4069一、什么是并查集 ...
相关推荐
编写算法交换二叉树中所有结点的左右子树 本文档主要介绍了如何编写算法交换二叉树中所有结点的左右子树。该算法使用 C 语言实现,通过建立二叉树、先序遍历输出结点数据和后序遍历交换左右子树三个步骤来实现。 ...
c++程序代码,实现了二叉树类的建立,遍历,以及交换所有结点的左右子树
二叉树中结点左右子树的递归交换算法设计 一、知识点总览 本文主要讨论二叉树的递归交换算法的设计和实现。该算法的核心是使用递归函数来交换二叉树中所有结点的左右子树,从而实现树形结构中结点的交换。该算法的...
这是数据结构的练习,利用c++语言编写,进行二叉树的左右子树交换,代码简洁但很实用
先序,后序,中序,层序遍历二叉树,并且通过出栈入栈的方式的交换所有结点左右子树并层序输出。
建立一棵二叉树按层次遍历该二叉树,并实现将二叉树中所有的结点的左右子树交换,显示其结果
交换二叉树的左右子树是一种常见的操作,可以改变二叉树的结构,这对于理解和分析算法的影响很重要。交换操作通常通过递归实现,首先交换左子树和右子树的根节点,然后对左右子树进行同样的交换操作,确保整个树的...
交换二叉树的左右子树并不会改变树中节点的顺序,只是改变了节点的相对位置,使得原本在左侧的子树现在位于右侧,反之亦然。 交换二叉树左右子树的运算可以通过递归或非递归的方式来实现。以下是一种基于递归的...
二叉树是一种特殊的树结构,每个节点最多有两个...这些资源可以帮助我们更好地理解和实践二叉树交换左右子树以及查询祖先结点的操作。通过分析和实践这些内容,可以提升对二叉树操作的掌握,从而在实际问题中灵活运用。
递归实现左右子树的互换的函数,上面还有完整的建树及遍历等一些基本操作
### 编写一个将二叉树中每个结点的左右孩子交换的算法 #### 背景介绍 在计算机科学中,二叉树是一种常用的数据结构,它在很多实际问题中有着广泛的应用,如文件系统、编译器设计、数据库索引等。二叉树中的每个...
二叉树的建立 先序、中序、后序遍历,交换所有结点左右子女
本文将深入探讨标题中提到的三个关键概念:中序遍历、子树交换以及叶子结点,并结合提供的文件名,推测这些内容可能与实现相关算法有关。 首先,我们来讨论“中序遍历”。中序遍历是二叉树遍历的一种方法,按照“左...
1.对给定二叉树用链式链式存储结构;利用队列与栈对二叉树进行运算。 2.按层次输出所有结点。 3.输出所有叶子结点。 4.将所有左右子树值交换。
根据给定文件的信息,本文将详细介绍二叉树的建立、先序、中序、后序以及层次遍历方法,左右子树的交换操作,以及如何实现凹入打印二叉树和删除节点等知识点。 ### 一、二叉树的建立 在给定的代码片段中,`bintree...
二叉树也是递归定义的,其结点有左右子树之分,逻辑上二叉树有五种基本形态: (1)空二叉树——(a); (2)只有一个根结点的二叉树——(b); (3)右子树为空的二叉树——(c); (4)左子树为空的二叉树——(d); (5)完全...
本主题主要关注如何建立二叉树、进行不同方式的遍历以及子树交换的操作。 一、二叉树的建立 建立二叉树的过程通常涉及从一组数据中创建相应的二叉树结构。数据可以是数组或链表形式,每个元素对应一个节点。二叉树...
可实现: 输入相应元素,用先序创建二叉树(无元素处用“#”) 递归先序遍历二叉树: ... 交换二叉树的左右子树: 二叉树已左右交换。 递归先序遍历二叉树: 递归中序遍历二叉树: 递归后序遍历二叉树:
能够按先序遍历的次序输入二叉树的各个结点,并能够输出中序遍历的序列号,以及指定的路径 和三个应用:求二叉树的深度 二叉树的叶子结点个数和将二叉树左右子树交换