当前位置:   article > 正文

非递归实现交换二叉树的左右子节点_二叉树左右节点交换非递归

二叉树左右节点交换非递归

思路一:

         两个队列

思路二:

         栈

  1. struct TreeNode
  2. {
  3. int m_nValue;
  4. TreeNode *m_pLeft;
  5. TreeNode *m_pRight;
  6. };
  7. void ExchangeNode(TreeNode *pRoot)
  8. {
  9. stack<TreeNode *> s;
  10. if (pRoot)
  11. s.push(pRoot);
  12. while (!s.empty())
  13. {
  14. TreeNode *cur = s.top();
  15. s.pop();
  16. TreeNode *pTmp = cur->m_pLeft;
  17. cur->m_pLeft = cur->m_pRight;
  18. cur->m_pRight = pTmp;
  19. if (cur->m_pLeft)
  20. s.push(cur->m_pLeft);
  21. if (cur->m_pRight)
  22. s.push(cur->m_pRight)
  23. }
  24. }


非递归前序、中序、后序遍历

两个栈

  1. void PreOrderNonRecursive(TreeNode * node)
  2. {
  3. stack<TreeNode *> s;
  4. s.push(node);
  5. while(!s.empty())
  6. {
  7. TreeNode * n = s.pop();
  8. visit(n);
  9. if(n->right!=NULL) s.push(n->right);
  10. if(n->left!=NULL) s.push(n->left);
  11. }
  12. }
  13. void InOrderNonRecursive(TreeNode * node)
  14. {
  15. stack<Tree
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号