当前位置: 首页 > 后端技术 > Java

二叉树遍历(Java版)

时间:2023-04-01 17:51:26 Java

递归最简单,迭代用的是栈(其实也是模拟递归)。前序遍历递归/***二叉树节点的定义。*公共类TreeNode{*intval;*左边的树节点;*正确的树节点;*TreeNode(){}*TreeNode(intval){this.val=val;}*TreeNode(intval,TreeNodeleft,TreeNoderight){*this.val=val;*this.left=左;*this.right=正确;*}*}*/classSolution{Listres=newArrayList();publicListpreorderTraversal(TreeNoderoot){if(root==null)returnres;res.add(root.val);preorderTraversal(root.left);preorderTraversal(root.right);返回资源;}}迭代类解决方案{Listres=newArrayList();Stackstack=newStack();publicListpreorderTraversal(TreeNoderoot){if(root==null)returnres;//前序根节点直接访问stack.push(root);while(!stack.isEmpty()){TreeNodecur=stack.流行音乐();水库。添加(cur.val);如果(当前正确!=空){堆栈。推(当前右);}if(cur.left!=null){stack.推(当前。左);}}返回资源;}}默认类解决方案{Listres=newArrayList();publicListinorderTraversal(TreeNoderoot){if(root==null)returnres;inorderTraversal(root.left);水库。添加(根。val);inorderTraversal(root.right);返回资源;}}defineclassSolution{Listres=newArrayList();Stackstack=newStack();publicListinorderTraversal(TreeNoderoot){if(root==null)returnres;//安装日志输入while(root!=null||!stack.isEmpty()){//安装默认值if(root!=null){stack.push(root);root=root.left;}else{//根节点为空,出栈直接访问左节点root=stack.pop();res.add(root.val);root=root.right;}}返回资源;}}后序遍历递归类解决方案{Listres=newArrayList();publicListpostorderTraversal(TreeNoderoot){if(root==null)returnres;后序遍历(root.left);后序遍历(root.right);res.add(root.val);返回资源;}}迭代类解决方案{LinkedListres=newLinkedList();Stackstack=newStack();publicListpostorderTraversal(TreeNoderoot){if(root==null)returnres;//根节点最后访问最先stack.push(root);while(!stack.isEmpty()){TreeNodecur=stack.pop();res.addFirst(cur.val);如果(cur.left!=null){stack.push(cur.left);}if(cur.right!=null){stack.push(cur.right);}}返回资源;}}

猜你喜欢