首页 > 编程知识 正文

java二叉树遍历算法,java二叉树的实现

时间:2023-05-05 22:40:41 阅读:30000 作者:2895

Java二叉树的前相遍历(递归/非递归)前相遍历码实现递归方式非递归方式

简介:遍历是对树的最基本运算。 遍历二叉树是指按一定的规则和顺序遍历二叉树的所有节点,使每个节点只访问一次,而且只访问一次。

假设l、d和r分别表示左子树的遍历、对根节点的访问以及对右子树的遍历,则对一个二叉树的遍历包括DLR (被称为前向遍历(,LDR )、中序遍历)

向前遍历向前遍历:首先访问当前节点,然后递归访问该节点左侧的子树,最后递归访问该节点右侧的子树。

图中所示二叉树的前序扫描的结果是[3、9、8、20、15、4、7]

实现代码递归方式的publiclistintegerpreordertraversal (treenode root ) listintegerpre=newlinkedlistinteger ); pre helper (根,预); 返回前; } publicvoidprehelper (趋势根,列表integer pre ) if ) root==null ) return; pre.add (根. val; pre helper (根. left,pre ); pre helper (根. right,pre ); }非递归方式publiclistintegerpreordertraversal (treenode root ) { StackTreeNode stack=new Stack ); 列表integer list=new ArrayList (; TreeNode cur=root; while (! stack.isempty(||cur!=null(while(cur!=null}{list.add(cur.val ); 堆叠. push (cur; cur=cur.left; } cur=stack.pop (; cur=cur.right; }返回列表; }完整代码:

publicstaticvoidmain (字符串[ ] args ) treenoderoot=newtreenode ) 3; treenodeN1=newtreenode(9; treenodeN2=newtreenode(20; treenodeN3=newtreenode(8; treenodeN4=newtreenode(15; treenodeN5=newtreenode(7; treenodeN6=newtreenode(4; 根. left=n1; root.right=n2; n1.right=n3; n2.left=n4; n2.right=n5; n4.left=n6; listintegerrs=前序遍历(根); 递归前向遍历结果: ' rs ); RS=preorder traversal2(根; 系统. out.println (非递归渐进遍历结果: ' rs ); //递归publicstaticlistintegerpreordertraversal (趋势根) {列表integer pre=new ArrayList ); pre helper (根,预); 返回前; } publicstaticvoidprehelper (treenode root,列表integer pre ) if ) root==null ) { return; }pre.add(root.val ); pre helper (根. left,pre ); pre helper (根. right,pre ); //非递归publicstaticlistintegerpreordertraversal2(treenode root ) { StackTreeNode stack=new Stack; 列表integer list=new ArrayList (; TreeNode cur=root; while (! stack.isempty(||cur!=null(while(cur!=null}{list.add(cur.val ); 堆叠. push (cur; cur=cur.left; } cur=stack.pop (; cur=cur.right; }返回列表; }执行结果:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。