首页 > 人工智能 > 正文

java中遍历list,java遍历中为什么要用两个for循环?

2020-05-20 09:39:33  来源:http://www.capsicumpm.com  编辑:admin

用JAVA语言实现二叉树的层次遍历的非递归算法及查找算法。

先序非递归算法 【思路】 假设:T是要遍历树的根指针,若T != NULL 对于非递归算法,引入栈模拟递归工作栈,初始时栈为空。 问题:如何用栈来保存信息,使得在先序遍历过左子树后,能利用栈顶信息获取T的右子树的根指针? 方法1:访问T->data后,将T入栈,遍历左子树;遍历完左子树返回时,栈顶元素应为T,出栈,再先序遍历T的右子树。 方法2:访问T->data后,将T->rchild入栈,遍历左子树;遍历完左子树返回时,栈顶元素应为T->rchild,出栈,遍历以该指针为根的子树。 【算法1】 void PreOrder(BiTree T, Status ( *Visit ) (ElemType e)) { // 基于方法一 InitStack(S); while ( T!=NULL || !StackEmpty(S)){ while ( T != NULL ){ Visit(T->data) ; Push(S,T); T = T->lchild; } if( !StackEmpty(S) ){ Pop(S,T); T = T->rchild; } } } 【算法2】 void PreOrder(BiTree T, Status ( *Visit ) (ElemType e)) { // 基于方法二 InitStack(S); while ( T!=NULL || !StackEmpty(S) ){ while ( T != NULL ){ Visit(T->data); Push(S, T->rchild); T = T->lchild; } if ( !StackEmpty(S) ){ Pop(S,T); } } } 进一步考虑:对于处理流程中的循环体的直到型、当型+直到型的实现。 中序非递归算法 【思路】 T是要遍历树的根指针,中序遍历要求在遍历完左子树后,访问根,再遍历右子树。 问题:如何用栈来保存信息,使得在中序遍历过左子树后,能利用栈顶信息获取T指针? 方法:先将T入栈,遍历左子树;遍历完左子树返回时,栈顶元素应为T,出栈,访问T->data,再中序遍历T的右子树。 【算法】 void InOrder(BiTree T, Status ( *Visit ) (ElemType e)) { InitStack(S); while ( T!=NULL || !StackEmpty(S) ){ while ( T != NULL ){ Push(S,T); T = T->lchild; } if( !StackEmpty(S) ){ Pop(S, T); Visit(T->data); T = T->rchild; } } } 进一步考虑:对于处理流程中的循环体的直到型、当型+直到型的实现。 后序非递归算法 【思路】 T是要遍历树的根指针,后序遍历要求在遍历完左右子树后,再访问根。需要判断根结点的左右子树是否均遍历过。 可采用标记法,结点入栈时,配一个标志tag一同入栈(0:遍历左子树前的现场保护,1:遍历右子树前的现场保护)。 首先将T和tag(为0)入栈,遍历左子树;返回后,修改栈顶tag为1,遍历右子树;最后访问根结点。 [Page] typedef struct stackElement{ Bitree data; char tag; }stackElemType; 【算法】 void PostOrder(BiTree T, Status ( *Visit ) (ElemType e)) { InitStack(S); while ( T!=NULL || !StackEmpty(S) ){ while ( T != NULL ){ Push(S,T,0); T = T->lchild; } while ( !StackEmpty(S) && GetTopTag(S)==1){ Pop(S, T); Visit(T->data); } if ( !StackEmpty(S) ){SetTopTag(S, 1); // 设置栈顶标记 T = GetTopPointer(S); // 取栈顶保存的指针 T = T->rchild;}else break;}}

用java怎样实现遍历一个字符串的每一个字母

Java遍历一个字符串的每一个字母String str = "asdfghjkl";方法一String str = "asdfghjkl";for(int i=0;i<str.length();i++){char ch = str.charAt(i);}方法二char[] c=s.toCharArray();for(char cc:c){...//cc直接用了}方法三for(int i=0;i<str.length();i++){String subStr = str.substring(i, i+1)}扩展资料String s = "aaaljlfeakdsflkjsadjaefdsafhaasdasd"; // 出现次数int num = 0; // 循环遍历每个字符,判断是否是字符 a ,如果是,累加次数for ( //输入代码 ){// 获取每个字符,判断是否是字符aif ( //输入代码 ) {// 累加统计次数num++;}}System.out.println("字符a出现的次数:" + num);参考资料:百度百科 Java

请问如何在js中遍历jsp页面里的java代码(如List<xxx>),程序代码如下

用<%=变量 %>,看下面例子就可以用js得到java的值:<script type="text/javascript">function testJS(){var c='<%=path %>'; // var c='<%=list2.get(i).getId() %>';等等alert(c);}</script> <%=path %>中的path可以换成你要的值,自己尝试写下吧,这样才能记得牢 根据代码d = new dtree('d');这句需要改成var d = new dtree('d');

JAVA编程矩阵转置,最后为什么要遍历

最后的遍历是为了输出数组。

java线程池 读写10万行文件进行遍历时,占用物理内存溢出

先优化下程序吧。你的每个8万行的list,读取完第一个文件,在读取第二个文件的时候释放吗?你“将这个list跟3万行的list 遍历通过相同的id获取3万行里的手机号码。”这个效率太低了,将3万行数据的list改为HashMap,key是id,value是手机号。