- 浏览: 787543 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
萨琳娜啊:
Java读源码之Netty深入剖析网盘地址:https://p ...
Netty源码学习-FileRegion -
飞天奔月:
写得有趣 ^_^
那一年你定义了一个接口 -
GoldRoger:
第二个方法很好
java-判断一个自然数是否是某个数的平方。当然不能使用开方运算 -
bylijinnan:
<script>alert("close ...
自己动手实现Java Validation -
paul920531:
39行有个bug:"int j=new Random ...
java-蓄水池抽样-要求从N个元素中随机的抽取k个元素,其中N无法确定
import java.util.LinkedList; import java.util.List; import java.util.Stack; public class BinTreeTraverse { //private int[] array={ 1, 2, 3, 4, 5, 6, 7, 8, 9 }; private int[] array={ 10,6,14,4,8,12,16};//BinarySearchTree private static List<Node> nodeList=null; public static void main(String[] args) { BinTreeTraverse tree=new BinTreeTraverse(); tree.createBinTree(); preOrder(nodeList.get(0)); System.out.println(); preOrderStack(nodeList.get(0)); System.out.println(); inOrder(nodeList.get(0)); System.out.println(); inOrderStack(nodeList.get(0)); System.out.println(); postOrder(nodeList.get(0)); System.out.println(); postOrderStack(nodeList.get(0)); System.out.println(); levelOrderStack(nodeList.get(0)); } public static void visit(Node node){ System.out.print(node.getData()+" "); } //create binary tree from array.the data stored in level-order public void createBinTree(){ nodeList=new LinkedList<Node>(); for(int i=0,len=array.length;i<len;i++){ nodeList.add(new Node(array[i])); } int len=array.length; int lastRootIndex=(len>>1)-1; for(int i=lastRootIndex;i>=0;i--){ Node root=nodeList.get(i); int leftIndex=i*2+1; Node leftNode=nodeList.get(leftIndex); //Node leftNode=new Node(array[leftIndex]);//this is wrong root.setLeft(leftNode); //最后的那个根节点一定是有左孩子的。右孩子则不一定 int rightIndex=leftIndex+1; if(rightIndex<=len-1){ Node rightNode=nodeList.get(rightIndex); root.setRight(rightNode); } } } //nonRecursion perOrder Traverse public static void preOrderStack(Node root){ Stack<Node> stack=new Stack<Node>(); Node p=root; if(p!=null){ stack.push(p); while(!stack.isEmpty()){ p=stack.pop(); visit(p); if(p.getRight()!=null)stack.push(p.getRight()); if(p.getLeft()!=null)stack.push(p.getLeft()); } } } //nonRecursion inOrder Traverse public static void inOrderStack(Node p){ Stack<Node> stack=new Stack<Node>(); while(p!=null||!stack.isEmpty()){ //push all LeftChild,when p has no LeftChild,that means it's root,it should be visited while(p!=null){ stack.push(p); p=p.getLeft(); } if(!stack.isEmpty()){ p=stack.pop(); visit(p); p=p.getRight(); } } } //nonRecursion postOrder Traverse public static void postOrderStack(Node p){ Stack<Node> stack=new Stack<Node>(); Node q=p;//q,is the latest Node that has been visited while(p!=null){ while(p.getLeft()!=null){ stack.push(p); p=p.getLeft(); } /* while(p!=null){//wrong.when 'while' ends,p=null stack.push(p); p=p.getLeft(); } */ /*left-right-root *when a node: *1.has no right-child -->p.getRight()==null *2.right-child has been visited -->p.getRight()==q *it's time to visit this node. */ while(p!=null&&(p.getRight()==null||p.getRight()==q)){ visit(p); q=p; if(stack.isEmpty())return; p=stack.pop(); } stack.push(p); p=p.getRight(); } } //level order public static void levelOrderStack(Node p){ if(p==null)return; List<Node> queue=new LinkedList<Node>(); queue.add(p); while(!queue.isEmpty()){ Node temp=queue.remove(0); System.out.print(temp.data+" "); if(temp.left!=null){ queue.add(temp.left); } if(temp.right!=null){ queue.add(temp.right); } } System.out.println(); } public static void preOrder(Node root){ if(root==null){return;} System.out.print(root.getData()+" "); preOrder(root.getLeft()); preOrder(root.getRight()); } public static void inOrder(Node root){ if(root==null){return;} inOrder(root.getLeft()); System.out.print(root.getData()+" "); inOrder(root.getRight()); } public static void postOrder(Node root){ if(root==null){return;} postOrder(root.getLeft()); postOrder(root.getRight()); System.out.print(root.getData()+" "); } private static class Node{ private Node left; private Node right; private int data; Node(int iData){ data=iData; left=null; right=null; } public void setLeft(Node leftNode){ this.left=leftNode; } public void setRight(Node rightNode){ this.right=rightNode; } public Node getLeft(){ return left; } public Node getRight(){ return right; } public int getData(){ return data; } } }
评论
3 楼
neyshule
2012-10-22
写的不对吧,p是nulll的时候还能get?
public static void inOrderStack(Node p){
Stack<Node> stack=new Stack<Node>();
while(p!=null||!stack.isEmpty()){
//push all LeftChild,when p has no LeftChild,that means it's root,it should be visited
while(p!=null){
stack.push(p);
p=p.getLeft();
}
if(!stack.isEmpty()){
p=stack.pop();
visit(p);
p=p.getRight();
}
}
}
public static void inOrderStack(Node p){
Stack<Node> stack=new Stack<Node>();
while(p!=null||!stack.isEmpty()){
//push all LeftChild,when p has no LeftChild,that means it's root,it should be visited
while(p!=null){
stack.push(p);
p=p.getLeft();
}
if(!stack.isEmpty()){
p=stack.pop();
visit(p);
p=p.getRight();
}
}
}
2 楼
ren2881971
2012-07-18
哎。。 早点学习到就好了 昨天面试 有问道。
1 楼
neyshule
2012-06-13
发表评论
-
二维数组(矩阵)对角线输出
2014-04-28 17:55 4677/** 二维数组 对角线输出 两个方向 例如对于数 ... -
线段树-poj1177-N个矩形求边长(离散化+扫描线)
2013-01-05 20:34 2957package com.ljn.base; import ... -
线段树-入门
2013-01-05 20:32 2155/** * 线段树入门 * 问题:已知线段 ... -
bitmap求哈密顿距离-给定N(1<=N<=100000)个五维的点A(x1,x2,x3,x4,x5),求两个点X(x1,x2,x3,x4,x5)和Y(
2012-12-27 21:12 2954import java.util.Random; / ... -
百度笔试题:一个已经排序好的很大的数组,现在给它划分成m段,每段长度不定,段长最长为k,然后段内打乱顺序,请设计一个算法对其进行重新排序
2012-12-21 18:17 4102import java.util.Arrays; ... -
有一个数组,每次从中间随机取一个,然后放回去,当所有的元素都被取过,返回总共的取的次数。写一个函数实现。复杂度是什么。
2012-12-07 14:32 3604import java.util.Random; i ... -
三色旗算法
2012-11-29 12:19 3795import java.util.Arrays; ... -
单调队列-用一个长度为k的窗在整数数列上移动,求窗里面所包含的数的最大值
2012-11-11 22:32 2357import java.util.LinkedList; ... -
据说是2012年10月人人网校招的一道笔试题-给出一个重物重量为X,另外提供的小砝码重量分别为1,3,9。。。3^N。 将重物放到天平左侧,问在两边如何添加砝码
2012-10-28 23:41 1971public class ScalesBalance { ... -
编程之美-分层遍历二叉树
2012-08-12 10:02 5901import java.util.ArrayList; ... -
编程之美-最短摘要的生成
2012-08-10 18:37 2472import java.util.HashMap; ... -
编程之美-计算字符串的相似度
2012-08-09 19:25 2889public class StringDistance ... -
编程之美-电话号码对应英语单词
2012-08-09 19:24 4214import java.util.Arrays; ... -
编程之美-数组中最长递增子序列
2012-08-09 19:22 2005import java.util.Arrays; imp ... -
编程之美-数组中最长递增子序列
2012-08-09 19:22 6import java.util.Arrays; imp ... -
xxx
2012-08-09 00:35 0package beautyOfCoding; public ... -
编程之美-子数组的最大和(二维)
2012-08-05 23:51 2255package beautyOfCoding; impo ... -
编程之美-子数组的最大乘积
2012-08-06 00:00 2272public class MaxProduct { ... -
编程之美-找符合条件的整数 用字符串来表示大整数避免溢出
2012-07-26 19:26 1840import java.util.LinkedList ... -
sudoku
2012-07-25 20:36 0package a; public class Sudoku ...
相关推荐
[问题描述] 建立二叉树,并输出二叉树的先序,中序和后序遍历序列,以及二叉树的叶子数。 [基本要求] 要求根据读取的元素建立二叉树,能输出各种遍历。 [实现提示] 可通过输入带空格的前序序列建立二叉链表。
其次,遍历二叉树是访问二叉树中所有节点的过程,有四种常用的遍历方法,分别是先序遍历、中序遍历、后序遍历和层次遍历。 先序遍历(Pre-order Traversal)的顺序是根节点 -> 左子树 -> 右子树。在Java中,可以...
根据访问节点的顺序不同,常见的遍历方法包括前序遍历、中序遍历、后序遍历和层次遍历。此外,我们还需要了解如何计算二叉树的宽度和深度。 #### 三、递归遍历 递归遍历是最直观的方法,它利用了递归的思想,将大的...
Java 二叉树遍历 二叉树是一种重要的数据结构,在计算机科学中有广泛的应用。在 Java 语言中,二叉树的遍历是指从根... Java 中有多种遍历方式,包括先序遍历、中序遍历和后序遍历,每种方式都有其特点和应用场景。
在"TwoTree.rar"这个压缩包中,可能包含的是关于二叉树遍历的具体实现代码或者相关问题的示例,可能涉及到不同的编程语言,如C++、Java或Python等。通过学习这些代码,你可以更好地理解如何在实际项目中应用这些遍历...
二叉树的非递归遍历运算 建立二叉树的三叉链式存储结构,在此基础上完成...4) 非递归的先序遍历、中序遍历、后序遍历算法 5)查找指定结点的双亲。 6)查找指定结点x,若存在返回true,否则返回false 7)求各结点的度。
在“完全二叉树先序、中序、后序、层次遍历.docx”文档中,应该详细列举了每种遍历方法的Java代码实现,以及可能的示例和解析,帮助读者理解如何在实际编程中运用这些概念。通过理解和掌握这些方法,不仅可以解决...
- 在Java中,可以通过类和对象来表示树结构,利用递归或栈、队列等数据结构实现各种遍历算法。节点类通常包含数据、指向子节点的引用以及可能的其他属性。 通过以上知识点的学习,开发者能够理解和实现树的各种...
其中,遍历方式包括先序遍历、中序遍历和后序遍历三种,这三种遍历方式分别按照不同的顺序访问树中的各个节点,可以用于不同场景下的问题解决。 #### 三、数据结构设计 为了实现二叉树的操作,首先需要定义二叉树...
本话题将详细讲解如何实现二叉树的各种子程序功能,包括创建、计算节点数目、计算叶子数目以及进行先序、中序、后序遍历。 1. **创建二叉树**: 创建二叉树通常涉及定义二叉树节点的数据结构,包括两个指向子节点的...
非递归的先序、中序、后序(复杂)o(n) 层次遍历 o(n) 常见题: 检查是否为平衡二叉树(高度差不超过1),o(n) 给定有序数组创建二叉查找树 o(log(n)) 计算数每层的节点 o(n) 判断某树是二叉查找树 最小最大法 求树...
在完成以上任务时,你需要编写相应的C、C++或Java等语言的程序,实现上述算法,并以适当的形式(如文本输出)显示和保存二叉树及其遍历序列。测试数据应覆盖各种可能的情况,确保算法的正确性。注意在提交作业时,...
- 包括层次遍历、先序遍历等。 - **由遍历序列还原树结构** - 根据遍历结果重构原始树的结构。 ##### 6.5 Huffman树 - **二叉编码树** - Huffman树是一种特殊的二叉树,用于构建最优的前缀码。 - **Huffman树及...
- **二叉树遍历**:包括先序遍历、中序遍历、后序遍历和层次遍历。 ##### 1. 先序遍历非递归算法 - **原理**:使用栈辅助完成非递归遍历。首先将根节点入栈,然后重复以下步骤直到栈为空:弹出栈顶节点并访问它,...
- 给定后序遍历序列`dabec`和中序遍历序列`debac`,可以通过递归方式确定前序遍历序列为`cedba`。 3. **排序算法内存需求**: - 归并排序需要额外的辅助空间,因此其内存量需求最大。 4. **数据结构类型**: - ...
- **树与森林的遍历:** 包括先序遍历、中序遍历、后序遍历等。 - **由遍历序列还原树结构:** 根据给定的遍历序列重建原来的树结构。 5. **Huffman树:** - **二叉编码树:** 一种特殊的二叉树,用于编码。 - ...