目录
✿二叉树的递归遍历❀
☞LeetCode144.前序遍历
☞LeetCode145.二叉树的后序遍历
☞LeetCode94.二叉树的中序遍历
✿二叉树的迭代遍历❀
☞LeetCode144.前序遍历
☞LeetCode145.二叉树的后序遍历
☞LeetCode94.二叉树的中序遍历
✿二叉树的统一迭代遍历❀
☞LeetCode144.前序遍历
☞LeetCode145.二叉树的后序遍历
☞LeetCode94.二叉树的中序遍历
✿二叉树的递归遍历❀
☞LeetCode144.前序遍历
链接:144.二叉树的前序遍历
public List<Integer> preorderTraversal(TreeNode root) {// 树中节点数目在范围 [0, 100] 内// 根左右List<Integer> result=new ArrayList<>();preorder(root,result);return result;}public void preorder(TreeNode root,List<Integer> result){if(root==null){return;}result.add(root.val); //根preorder(root.left,result); // 左preorder(root.right,result); //右}
☞LeetCode145.二叉树的后序遍历
链接:145.二叉树的后序遍历
public List<Integer> postorderTraversal(TreeNode root) {List<Integer> result=new ArrayList<>();postorder(root,result);return result;}public void postorder(TreeNode root,List<Integer> result){// 左右根if(root==null){return;}postorder(root.left,result);postorder(root.right,result);result.add(root.val);}
☞LeetCode94.二叉树的中序遍历
链接:94.二叉树的中序遍历
public List<Integer> inorderTraversal(TreeNode root) {List<Integer> result=new ArrayList<>();inorder(root,result);return result;}public void inorder(TreeNode root,List<Integer> result){// 左根右if(root==null){return;}inorder(root.left,result);result.add(root.val);inorder(root.right,result);}
✿二叉树的迭代遍历❀
☞LeetCode144.前序遍历
链接:144.二叉树的前序遍历
public List<Integer> preorderTraversal(TreeNode root) {// 迭代法List<Integer> result=new ArrayList<>();if(root==null){return result;}Stack<TreeNode> st=new Stack<>();st.push(root);// 根右左while(!st.isEmpty()){TreeNode node=st.pop();result.add(node.val);if(node.right!=null){st.push(node.right);}if(node.left!=null){st.push(node.left);}}return result;}
☞LeetCode145.二叉树的后序遍历
链接:145.二叉树的后序遍历
public List<Integer> postorderTraversal(TreeNode root) {// 迭代法List<Integer> result=new ArrayList<>();if(root==null){return result;}Stack<TreeNode> st=new Stack<>();st.push(root);while(!st.isEmpty()){TreeNode node=st.pop();result.add(node.val);if(node.left!=null){st.push(node.left);}if(node.right!=null){st.push(node.right);}}
// 反转List<Integer> list=new ArrayList<>();for (int i = result.size()-1; i >=0; i--) {list.add(result.get(i));}return list;}
☞LeetCode94.二叉树的中序遍历
链接:94.二叉树的中序遍历
public List<Integer> inorderTraversal(TreeNode root) {// 迭代法List<Integer> result=new ArrayList<>();if(root==null){return result;}Stack<TreeNode> st=new Stack<>();TreeNode cur=root;while(cur!=null || !st.isEmpty()){if(cur!=null){st.push(cur);cur=cur.left;}else{cur=st.pop();result.add(cur.val);cur=cur.right;}}return result;}
✿二叉树的统一迭代遍历❀
☞LeetCode144.前序遍历
链接:144.二叉树的前序遍历
public List<Integer> preorderTraversal(TreeNode root) {// 统一迭代法List<Integer> result=new ArrayList<>();if(root==null){return result;}Stack<TreeNode> st=new Stack<>();st.push(root);while(!st.isEmpty()){TreeNode node=st.peek();if(node==null){st.pop(); //弹出空节点result.add(st.pop().val);}else{st.pop();if(node.right!=null){st.push(node.right); //右}if(node.left!=null){st.push(node.left); //左}st.push(node); // 中st.push(null); // 空}}return result;}
☞LeetCode145.二叉树的后序遍历
链接:145.二叉树的后序遍历
public List<Integer> postorderTraversal(TreeNode root) {//统一迭代法List<Integer> result=new ArrayList<>();if(root==null){return result;}Stack<TreeNode> st=new Stack<>();st.push(root);while(!st.isEmpty()){TreeNode node=st.peek();if(node==null){st.pop(); //弹出空节点result.add(st.pop().val);}else{st.pop();st.push(node); //中st.push(null); // 空if(node.right!=null){st.push(node.right); // 右}if(node.left!=null){st.push(node.left); // 左}}}return result;}
☞LeetCode94.二叉树的中序遍历
链接:94.二叉树的中序遍历
public List<Integer> inorderTraversal(TreeNode root) {// 统一迭代遍历List<Integer> result=new ArrayList<>();if(root==null){return result;}Stack<TreeNode> st=new Stack<>();st.push(root);while(!st.isEmpty()){TreeNode node=st.peek();if(node==null){st.pop(); // 弹出空节点result.add(st.pop().val); //放入结果集}else{st.pop(); // 先出栈if(node.right!=null){st.push(node.right); // 右}st.push(node); // 中st.push(null); // 空if(node.left!=null){ // 左st.push(node.left);}}}return result;}
本文链接:https://my.lmcjl.com/post/1552.html
展开阅读全文
4 评论