转自:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/solution/leetcodesuan-fa-xiu-lian-dong-hua-yan-shi-xbian-2/
前中后遍历都很简单,就不写了。
力扣144题,二叉树的前序遍历:前序遍历的迭代解法,也是比较简单,利用栈先入根节点,根节点弹出,再入右子节点和左子节点,那么之后就是左子节点先弹出进行遍历,右子节点们一直被压栈。
class Solution { public: vector<int> preorderTraversal(TreeNode* root) { vector<int> ans; if(!root) return ans; stack<TreeNode*> st; st.push(root); while(!st.empty()){ TreeNode* t=st.top();st.pop(); ans.push_back(t->val); if(t->right)st.push(t->right); if(t->left)st.push(t->left); } return ans; } };
力扣94题,二叉树的中序遍历:
Java版本的代码:
public static void inOrderIteration(TreeNode head) { if (head == null) { return; } TreeNode cur = head; Stack<TreeNode> stack = new Stack<>(); while (!stack.isEmpty() || cur != null) { while (cur != null) { stack.push(cur); cur = cur.left; } TreeNode node = stack.pop(); System.out.print(node.value + " "); if (node.right != null) { cur = node.right; } } } 作者:gre-z 链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/solution/leetcodesuan-fa-xiu-lian-dong-hua-yan-shi-xbian-2/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
内部的while循环表示处理左子树,然后node就是当前的节点,也就相当于此子树中的根节点,然后right了就是去遍历右子树了。
3月份的时候学习过,当然过了7个月到现在已经全忘记了。。。
原文:https://www.cnblogs.com/BlueBlueSea/p/13888630.html