代码随想录(12)二叉树

 ZR_yst     2023-11-21     370     0   

欢迎来到银盒子的世界~

图片.png



前序遍历,有递归和非递归两种,然后迭代又有两种,

递归,没啥好说的,就是中左右,先处理这个节点,再是左孩子,右孩子

迭代,(1)

首先是一个栈,入栈根节点,如果栈存在,那么出栈,list.append(),入栈右孩子,左孩子(因为出栈是左右,正好是中左右的顺序),而且不必判断左右孩子是否存在

(2)

统一迭代法会有None的加入,那么,还是栈,入栈根节点,当栈存在,出栈,判断是否存在,存在则入栈右孩子(也要判断,因为统一迭代法需要None作为处理的标志,第一次是访问,第二次打上None的标志表示处理该节点),入栈左孩子,入栈根节点,并且打上None标志,下次就知道要处理这个节点了








图片.png

图片.png


图片.png





好好好,到二叉树了,




图片.png

后序遍历,有递归和非递归两种,然后迭代又有两种,和前序基本一致

递归,没啥好说的,就是左右中,先处理左孩子,右孩子,再是中

迭代,(1)

首先是一个栈,入栈根节点,如果栈存在,那么出栈,list.append(),入栈左孩子,右孩子(因为出栈是右左,正好是中右左的顺序),最后返回倒序就行

(2)

统一迭代法会有None的加入,那么,还是栈,入栈根节点,当栈存在,出栈,判断是否存在,存在则入栈入栈根节点并且打上None标志,入栈右孩子,入栈左孩子





图片.png


图片.png


图片.png



图片.png


是中序呢,左中右,

递归自不必说,

迭代(1)与上面不一样的是,左中右,所以先不入栈,当栈或根节点时,如果根节点,入栈,并指向左孩子,否则出栈,list.append(),指向右孩子

(2)统一迭代法,和上面差不多,只是入栈是右孩子,中间节点,None,左孩子

图片.png


图片.png


图片.png


发表评论