Visit node Traverse(left child) Traverse(right child)
Traverse(left child) Visit node Traverse(right child)
Traverse(left child) TRaverse(right child) Visit node
Creat a queue called nodes Create an unordered list calles results Enqueue the root onto the nodes queue while the nodes queue is not empty { Dequeue the first element from the queue If that element is not null Add that element to the rear of the results list Enqueue the children of the element on the nodes queue Else Add null on the result list } Return an iterator for the result list
操做 | 最差时间复杂度 |
---|---|
getRoot | 返回指向二叉树根的引用 |
isEmpty | 断定该树是否为空 |
size | 断定树中的元素数目 |
contains | 断定指定目标是否在该树中 |
find | 若是找到指定元素,则返回指向其的引用 |
toString | 返回树的字符串表示 |
itertorInOrder | 为树的中序遍历返回一个迭代器 |
itertorPreOrder | 为树的前序遍历返回一个迭代器 |
iteratorPostOrder | 为树的后序遍历返回一个迭代器 |
iteratorLevelOrder | 为树的层序遍历返回一个迭代器 |
两种特殊的二叉树
html
BinaryNode(T data , BinaryNode<T> left , BinaryNode<T> right )
ThreeNode(T data ,ThreeNode<T> parent,ThreeNode<T> left,ThreeNode<T> right)
UnorderedListADT<BinaryTreeNode<ExpressionTreeOp>> nodes = new ArrayUnorderedList<BinaryTreeNode<ExpressionTreeOp>>(); UnorderedListADT<Integer> levelList = new ArrayUnorderedList<Integer>(); BinaryTreeNode<ExpressionTreeOp> current; String result = ""; int printDepth = this.getHeight(); int possibleNodes = (int)Math.pow(2, printDepth + 1); int countNodes = 0; nodes.addToRear(root); Integer currentLevel = 0; Integer previousLevel = -1; levelList.addToRear(currentLevel); while (countNodes < possibleNodes) { countNodes = countNodes + 1; current = nodes.removeFirst(); currentLevel = levelList.removeFirst(); if (currentLevel > previousLevel) { result = result + "\n\n"; previousLevel = currentLevel; for (int j = 0; j < ((Math.pow(2, (printDepth - currentLevel))) - 1); j++) result = result + " "; } else { for (int i = 0; i < ((Math.pow(2, (printDepth - currentLevel + 1)) - 1)) ; i++) { result = result + " "; } } if (current != null) { result = result + (current.getElement()).toString(); nodes.addToRear(current.getLeft()); levelList.addToRear(currentLevel + 1); nodes.addToRear(current.getRight()); levelList.addToRear(currentLevel + 1); } else { nodes.addToRear(null); levelList.addToRear(currentLevel + 1); nodes.addToRear(null); levelList.addToRear(currentLevel + 1); result = result + " "; } } return result; }
if ((operator == '+') || (operator == '-') || (operator == '*') || (operator == '/')) { operand1 = getOperand(treeStack); operand2 = getOperand(treeStack); treeStack.push(new ExpressionTree (new ExpressionTreeOp(1,operator,0), operand2, operand1)); } else { treeStack.push(new ExpressionTree(new ExpressionTreeOp (2,' ',Integer.parseInt(tempToken)), null, null)); }
原来,termType的用法是接收传入的形参,判断传入的形参是否为1以此来返回ture或者false来判断是否为操做符。java
这周没有错题哦~node
这周的内容相比前面几周所学习的内容来讲难了许多,从代码的理解难易程度上就可以感受的出来,这周也花费了我更多的实践,同时也给本身敲了一个警钟,本身不会和不清楚的只是还有不少,不能再像以前那样佛系学习,要更加的努力才是,但愿能在之后的学习生活中继续进步!git
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
第一周 | 200/200 | 1/1 | 5/20 | |
第二周 | 981/1181 | 1/2 | 15/20 | |
第三周 | 1694/2875 | 1/3 | 15/35 | |
第四周 | 3129/6004 | 1/4 | 15/50 | |
第五周 | 1294/7298 | 1/5 | 15/65 | |
第六周 | 1426/8724 | 1/6 | 20/85 |
计划学习时间:20小时web
实际学习时间:20小时算法