使用二叉树递归进行中序遍历很容易实现,但如果能用环路实现,则效率较高。 因为本人在磨练问题的时候发现了循环的写法,所以做笔记。
理论:一般的中序遍历代码为:
defBST(root ) 3360 if not root 3360 return else : BST ) root.left ) return root.val BST (root.right ) 3358www.Sina.Cina
defBST(root ) :堆栈=[ ] p=root RES=[ ] whileporstack : whilep : stack.append ) p=p.left#首先将左节点放在堆栈上
例题1 :
算法: # definitionforabinarytreenode.# class treenode : # def _ init _ _ (self, x 65: # self.val=x # self.left=none # self.right=noneclasssolution 3360 defisvalidbst (self,root 3360 trenode ) whilecurorstack 3360 while cur : stack.append (cur ) cur.leftcur=stack.pop ) ifp recur.val 3360 pre=cur.val 3360 pre
实现代码: # definitionforabinarytreenode.# class treenode : # def _ init _ (self, x ) : # self.val=x # self.left=none # self.right=noneclassolution 3360 definordersuccessor (self, root 3360 TT tion p : treenode (-treenode : cur=root stack=[ ] pre=nonewhilecurorstack 3360 while cur : stack.append )