leetcode 145. Binary Tree Postorder Traversal 思路一: 使用一个栈stack保存经过的根结点,另一个栈flag保存每个结点的右子树是否遍历: 如果根结点存在,结点入栈,并把结点的右子树遍历结果置为0,代表没遍历: 把root指向左子树: 如果栈不为空,判断栈顶元素右子树是否存在以及是否已经遍历,如果存在并且没有遍历,则把root指向右子树:否则,结点出栈,并且把结点的右子树遍历标志出栈: 重复2-4直到栈空或者root不存在. 这是第一个一下想到的思…
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-chil…
#include <iostream> #include <cstdio> #include <stdio.h> #include <string> #include <queue> #include <stack> using namespace std; class Node{ public : char data; struct Node *lchild,*rchild; }; class BiTree{ public: Nod…
class Queue: def __init__(self,max_size): self.max_size = int(max_size) self.queue = [] def put(self,data): if self.max_size > 0: if self.full(): raise ValueError('Queue is full!') else: self._put(data) def get(self): if self._queue_size() > 0: resu…
非递归按照 层序 创建二叉树,利用 队列(即可先进先出特点)存放已访问的结点元素的地址. 初始化:front=rear= -1: 每储存一个结点元素 rear+1 ,利用 rear%2==0 来使 front+1 回车表示结点输入完毕 // 结构体 struct Node { char data; Node * lchild; Node * rchild; }; /* 类 class Tree中的私有构造方法 Node * Create() 注:该方法需要 以层序遍历的方式输入 */ Node…
刚刚开始学习python,按照廖雪峰的网站看的,当前看到了函数这一节.结合数组操作,写了个非递归的全排列生成.原理是插入法,也就是在一个有n个元素的已有排列中,后加入的元素,依次在前,中,后的每一个位置插入,生成n+1个新的全排列.因为Python切割数组或者字符串,以及合并比较方便,所以,程序会节省很多代码. def getArrayInsertCharToStr(STR,CHAR): arr =[] s_len = len(STR) index =0 while index <= s_len…
class MyBinaryTree<T> { BinaryNode<T> root; public MyBinaryTree() { root = new BinaryNode<>(); } /** * 堆栈进行先序遍历 * * @param ts */ public void preorderTraversal(T... ts) { Stack<BinaryNode<T>> binaryStack = new Stack<>();…
class Queue: def __init__(self,max_size): self.max_size = int(max_size) self.queue = [] def put(self,data): if self.max_size > 0: if self.full(): raise ValueError('Queue is full!') else: self._put(data) def get(self): if self._queue_size() > 0: resu…
先序遍历,中序遍历,后序遍历 ,区别在于三条核心语句的位置 层序遍历  采用队列的遍历操作第一次访问根,在访问根的左孩子,接着访问根的有孩子,然后下一层 自左向右一一访问同层的结点 # 先序遍历 # 访问结点,遍历左子树,如果左子树为空,则遍历右子树, # 如果右子树为空,则向上走到一个可以向右走的结点,继续该过程 preorder(t):    if t:       print t.value       preorder t.L       preorder t.R # 中序遍历 # 从根…
递归代码:递归实现很简单 '二叉树结点类' class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None '列表创建二叉树' def listcreattree(root,llist,i):###用列表递归创建二叉树, #它其实创建过程也是从根开始a开始,创左子树b,再创b的左子树,如果b的左子树为空,返回none. #再接着创建b的右子树, if i<len(llist): if l…