当前位置:   article > 正文

括号字符串表示的二叉树,用栈转换为树结构_python 括号树转化为树

python 括号树转化为树

题目描述:字符串str="1(2(3,4(,5)),6(7,))"表示一棵二叉树,其中A(B,C)表示A为根结点,B和C为A的左右子节点。根据字符串输出二叉树的中序遍历。

思路:利用栈记录当前构建子树的根结点,利用方向标识记录当前构建子树方向(左子树/右子树)。具体步骤如下:

1. 遇到左括号,说明开始构建新的子树,将左括号之前的值入栈并且将方向flag置为true(表示接下来构建左子树)。此时栈顶记录的是当前构造子树的根结点;

2. 遇到右括号,说明当前子树构建完毕,将栈顶元素弹出,并且将方向flag置为false。因为当前子树构建完毕,接下来只能是构造右子树或者继续向上回溯(向上回溯后也是构造右子树,因此相同的处理),flag置为false;

3. 遇到逗号,说明左子树构建完成,接下来构建右子树,将方向flag置为false。

4. 遇到普通value,将value包装为结点,根据方向flag连接到栈顶元素的左子节点/右子节点。

  1. //结点数据结构
  2. class MiNode{
  3. char val;
  4. MiNode left=null,right=null;
  5. MiNode(char val){
  6. this.val=val;
  7. }
  8. }
  9. //树的中序遍历
  10. public StringBuffer midTrace(MiNode root){
  11. StringBuffer answer=new StringBuffer();
  12. if(root==null) return answer;
  13. answer.append(midTrace(root.left));
  14. answer.append(root.val);
  15. answer.append(midTrace(root.right));
  16. return answer;
  17. }
  18. //将字符串转换为树结构
  19. public String midTraceByStack(String str){
  20. String answer="";
  21. if(str==null||str.length()==0) return answer;
  22. char[] chars=str.toCharArray();
  23. Stack<MiNode> stack=new Stack<>();
  24. boolean dircFlag=true;
  25. //临时变量
  26. int length=chars.length;
  27. char currentValue=chars[0];
  28. MiNode node=new MiNode(currentValue);
  29. //保存根结点位置
  30. MiNode root=node;
  31. for(int i=1;i<length;i++){
  32. currentValue=chars[i];
  33. //当前字符的四种情况
  34. if(currentValue=='('){
  35. stack.push(node);
  36. dircFlag=true;
  37. }
  38. else if(currentValue==')'){
  39. stack.pop();
  40. dircFlag=false;
  41. }
  42. else if(currentValue==','){
  43. dircFlag=false;
  44. }
  45. else{
  46. node=new MiNode(currentValue);
  47. if(dircFlag){
  48. stack.peek().left=node;
  49. }
  50. else{
  51. stack.peek().right=node;
  52. }
  53. }
  54. }
  55. //树的中序遍历
  56. answer=midTrace(root).toString();
  57. return answer;
  58. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/233381
推荐阅读
相关标签
  

闽ICP备14008679号