Binary Tree Preorder Traversal Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 \ 2 / 3 return [1,2,3]. Note: Recursive solution is trivial, could you do it iteratively µÄÈ·Èçnote˵µÄÒ»Ñù£¬Ê¹ÓõݹéÖ»ÐèÒª¼¸·ÖÖӾͽâ¾öÁË£¬Èç¹û²»ÊÇÓõݹ飬×Ô¼º×ÁÄ¥µÄ»°»¹ÊÇ»¨Á˲¶à°ë¸öСʱ¡£ ¿´´úÂë¾ÍÖªµÀ·ÇµÝ¹é±ÈµÝ¹é³¤ºÜ¶à¡£ ·ÇµÝ¹é·½·¨Ö÷ÒªÄѵ㣺 1. ÐèҪʹÓÃÁ½¸öÑ»·£¬×ó×ÓÊ÷Ñ»·Ç¶Ì×ÓÒ×ÓÊ÷Ñ»·£» 2. ÓÐÓÒ×ÓÊ÷µÄʱºò£¬ÐèÒªÌø³ö±¾Ñ»·£¬ÈÃÆäÖØÐ½øÈë×ó×ÓÊ÷Ñ»·¡£ 2. ÎÞ×ó×ÓÊ÷µÄʱºò£¬ÐèÒª³öÕ»£¬¶ø²»Êǵȵ½¿Õ×ÓÊ÷²Å³öÕ»¡£ ÏÂÃæÊ¹ÓÃÁ½ÖÖ·½·¨½â¾öÒ»ÏÂÕâ¸öÌâÄ¿£¬ËûÃǵÄʱ¼äЧÂʶ¼²î²»¶à£¬¶¼ÊÇ12ms,´ó¸Å²âÊÔÊý¾Ý¶¼ºÜÉÙ£¬ËùÒÔʱ¼ä¶¼Ò»Ñù¡£Ò²ÊÇLeetCodeÉϵÄÒ»¸öË®ÌâÁË£¬²âÊÔÊý¾Ý¶¼²»¶à¡£ Ö÷º¯Êý¶¼ÊÇÒ»ÑùµÄ£º [cpp] vector<int> preorderTraversal£¨TreeNode *root£© { vector<int> prePath; preStack£¨root, prePath£©£» return prePath; } µÝ¹é·¨£º [cpp] void preNodes£¨TreeNode *node,vector<int> &onePath£© { if£¨node == nullptr£© return; onePath.push_back£¨node->val£©£» preNodes£¨node->left, onePath£©£» preNodes£¨node->right, onePath£©£» } ·ÇµÝ¹é·¨£º [cpp] void preStack£¨TreeNode *node, vector<int> &prePath£© { if£¨node == nullptr£© return; stack<TreeNode *> stk; TreeNode *cur = node; stk.push£¨cur£©£» while £¨£¡stk.empty£¨£©£© { cur = stk.top£¨£©£» prePath.push_back£¨cur->val£©£» while £¨cur->left£© { prePath.push_back£¨cur->left->val£©£» cur = cur->left; stk.push£¨cur£©£» } stk.pop£¨£©£» while £¨£¡stk.empty£¨£© || cur->right£© { if£¨cur->right£© { cur = cur->right; stk.push£¨cur£©£» break; } else { cur = stk.top£¨£©£» stk.pop£¨£©£» } }//while }//while } |